Olá, Alison! Tudo bem?
Agradeço por aguardar o nosso retorno.
O problema pode estar relacionado à forma como as queries SQL estão sendo executadas. Por exemplo, quando você faz query = 'UPDATE...'
, depois query = 'DELETE...'
, e por fim query = 'INSERT...'
, só a última fica guardada na variável query.
Seguindo então, no conn.execute(text(query))
, só o INSERT
é executado — o UPDATE
e o DELETE
são perdidos.
Além disso, no final, você mostra o DataFrame original dados do CSV, que não reflete as mudanças feitas no banco.
Sendo assim, segue um exemplo para que seja aplicado as mudanças:
1 - Importar bibliotecas e criar o objeto engine
import sqlalchemy
from sqlalchemy import create_engine, MetaData, Table, inspect
engine = create_engine('sqlite:///:memory:')
2- Leitura dos dados
import pandas as pd
url = 'https://raw.githubusercontent.com/alura-cursos/Pandas/main/clientes_banco.csv'
dados = pd.read_csv(url)
dados.to_sql('clientes', engine, index=False)
3 - Obtendo o dataframe
pd.read_sql_table('clientes', engine)
4- Importação sqlalchemy
from sqlalchemy import text
5 - Atualização dos registros
query = 'UPDATE Clientes SET Rendimento_anual=300000.0 WHERE ID_Cliente=6840104'
with engine.connect() as conn:
result = conn.execute(text(query))
conn.commit()
query = 'DELETE FROM clientes WHERE ID_Cliente=5008809'
with engine.connect() as conn:
result = conn.execute(text(query))
conn.commit()
6 - Criando o novo reigistro
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:
result = conn.execute(text(query))
conn.commit()
7 - Exibindo o dataframe com as modificações feitas
pd.read_sql_table('clientes', engine)
Segue o link do notebook usado para teste: https://colab.research.google.com/drive/13OCG9ceH-vXI12KbBrqJ_z_s8xXPKZw5?usp=sharing
Espero ter ajudado, conte sempre conosco para te auxiliar.
Até mais, Alison!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado!