3
respostas

Ao executar os códigos propostos na solução aparece o seguinte erro:

ipython-input-12-49cdaf33b2bc>:12: 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', con=engine, if_exists='replace', index=False)

AttributeError Traceback (most recent call last) in <cell line: 12>() 10 11 # Tenta salvar os dados no banco ---> 12 dados.to_sql('clientes', con=engine, if_exists='replace', 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'

3 respostas

Oi Marcelo!

Parece que o erro está relacionado com o uso do SQLAlchemy para conectar ao banco de dados. O Pandas exige que o engine utilizado com o to_sql seja do tipo SQLAlchemy, e parece que a conexão que você está utilizando não é compatível ou está mal configurada.

Uma possível solução seria garantir que você está criando a conexão corretamente utilizando o SQLAlchemy. Tente o seguinte:

  1. Certifique-se de ter o SQLAlchemy instalado:

    pip install sqlalchemy
    
  2. Depois, crie a conexão com o banco de dados usando SQLAlchemy da seguinte forma:

    from sqlalchemy import create_engine
    
    # Substitua o 'sqlite:///seubanco.db' pela URL de conexão do seu banco de dados
    engine = create_engine('sqlite:///seubanco.db')
    
  3. Agora, use o to_sql para inserir os dados:

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

Essa abordagem deve resolver o problema, porque estamos usando a forma correta de criar o engine compatível com o Pandas. O erro AttributeError: 'Engine' object has no attribute 'cursor' ocorre porque a conexão que você estava utilizando não é a que o Pandas espera para executar a operação.

Tenta aí e me avisa se não funcionar!

Obrigado. Agora executou corretamente

No entanto, ao tentar executar o código

query = 'DELETE FROM clientes WHERE ID_Cliente=5008809' with engine.connect() as conn: conn.execute(query)

query = 'DELETE FROM clientes WHERE ID_Cliente=5008809' with engine.connect() as conn: conn.execute(query)

query = 'INSERT INTO clientes (ID_Cliente, Idade, Grau_escolaridade, Estado_civil, ' 'Tamanho_familia, Categoria_de_renda, Ocupacao, Anos_empregado, ' 'Rendimento_anual, Tem_carro, Moradia) ' 'VALUES (6850985, 33, "Doutorado", "Solteiro", 1, "Empregado", "TI", ' '2, 290000, 0, "Casa/apartamento próprio")'

with engine.connect() as conn: conn.execute(query)

Em resumo, nenhum dos códigos propostos na solução pelo instrutor são executados.

Gostaria de uma solução para executar as alterações propostas no banco de dados.