1
resposta

AttributeError: 'Engine' object has no attribute 'cursor'

mesmo com a versao do sqlalchemy 1.4..54 instalada continua dando esse erro

<ipython-input-8-ca1f70db2d65>:1: UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.
  dados.to_sql('clientes', engine, index=False)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-8-ca1f70db2d65> in <cell line: 1>()
----> 1 dados.to_sql('clientes', engine, index=False)

7 frames
/usr/local/lib/python3.10/dist-packages/pandas/io/sql.py in execute(self, sql, params)
   2670             raise TypeError("Query must be a string unless using sqlalchemy.")
   2671         args = [] if params is None else [params]
-> 2672         cur = self.con.cursor()
   2673         try:
   2674             cur.execute(sql, *args)

AttributeError: 'Engine' object has no attribute 'cursor'
1 resposta

Oii, Felipe! Tudo bem?

Esse erro devido ao Pandas esperar uma conexão com uma interface específica, mas a engine do SQLAlchemy não fornece diretamente essa interface.

Como sugestão, atualize o SqlAlchemy para uma versão mais atual, para evitar bugs como este. Você pode usar o comando:

pip install sqlalchemy --upgrade

Outro detalhe, no momento de realizar a consulta dados.to_sql('clientes', engine, index=False) adicione o con=engine porque o parâmetro con especifica a conexão com o banco de dados onde a tabela será criada. Exemplo:

dados.to_sql('clientes', con=engine, index=False, if_exists='replace')

O if_exists='replace' foi adicionado no código acima para substituir a tabela se ela já existir.

Realize os testes de observe se funciona como esperado.

Caso tenha alguma dúvida, conte conosco aqui no fórum para te auxiliar.

Bons estudos e até mais!