2
respostas

[Resolvido] Error with engine.connect()

Gostaria de compartilhar um erro que obtive durante a conexão com a base de dados 'clientes', através do código with engine.connect() as conn: conn.execute(query):

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

O erro ocorre porque o método conn.execute() espera um objeto SQLAlchemy executável, não uma string SQL. Para executar um comando SQL diretamente, precisamos usar a função text() do SQLAlchemy e engine.begin() desta forma:

from sqlalchemy import text
query = 'delete from clientes where ID_Cliente = 5008804'
with engine.begin() as conn:
    conn.execute(text(query))
2 respostas

Oi, Igor! tudo bem?

Você conseguiu resolver o bug e rodar o código?

Qualquer dúvida, não hesite em perguntar :)

Bom dia.

Apenas para contexto da situação:

Consegui resolver o que na verdade seria questão de versão do método sqlalchemy.

E caso alguém esteja tendo dificuldade em executar o código, aqui está a solução:

Passar uma string para Connection.execute() está obsoleto e será removido na versão 2.0. Neste caso, deveremos utilizar a função text() do SqlAlchemy junto com o engine.begin() ao invés do engine.connect() para invocar uma string SQL no nível do driver.

Conforme explicado no tutorial SQLAlchemy aqui , with engine.connect() as conn:- o método "commit as you go" - não faz commit automaticamente ao sair do with block, enquanto with engine.begin() as conn:- o método "begin once" - faz commit automaticamente. Então o código correto seria:

from sqlalchemy import text
query = 'delete from clientes where ID_Cliente = 5008804'
with engine.begin() as conn:
    conn.execute(text(query))