Olá pessoal,
Finalizei o desafio proposto e gostaria de compartilhar minha solução para manipular um banco de dados local usando SQLAlchemy com ORM (Object-Relational Mapping). Estou enviando aqui para receber feedback sobre a abordagem utilizada.
Contexto do Desafio
A missão foi:
- Criar um banco de dados local com SQLAlchemy.
- Carregar os dados de um arquivo CSV nesse banco.
- Realizar três operações:
- Atualizar o rendimento anual do cliente com ID
6840104
para300000
. - Excluir o cliente com ID
5008809
. - Inserir um novo cliente conforme especificação dada.
- Atualizar o rendimento anual do cliente com ID
Minha Solução
1. Importações e criação do banco de dados
import pandas as pd
from sqlalchemy import create_engine
# Criação do engine SQLite
engine = create_engine('sqlite:///dados/clientes_banco_orm.db')
2. Exploração inicial dos dados CSV
Antes de criar a estrutura da tabela, é importante explorar os dados:
# Leitura do arquivo CSV
url = 'dados/clientes_banco.csv'
df = pd.read_csv(url)
# Visualização inicial
df.head()
3. Inspeção dos tipos de dados
df.dtypes
Essa etapa nos ajuda a definir corretamente os tipos de colunas na tabela SQL.
4. Definindo a classe ORM com base no CSV
from sqlalchemy import Column, Integer, String, Float
from sqlalchemy.orm import declarative_base, Session
Base = declarative_base()
class Cliente(Base):
__tablename__ = 'clientes'
ID_Cliente = Column(Integer, primary_key=True)
Idade = Column(Integer)
Grau_escolaridade = Column(String)
Estado_civil = Column(String)
Tamanho_familia = Column(Integer)
Categoria_de_renda = Column(String)
Ocupacao = Column(String)
Anos_empregado = Column(Integer)
Rendimento_anual = Column(Float)
Tem_carro = Column(Integer)
Moradia = Column(String)
5. Criando a tabela no banco
Base.metadata.create_all(engine)
6. Inserindo os dados do CSV no banco
df.to_sql('clientes', engine, index=False, if_exists='replace')
7. Atualizando, excluindo e inserindo registros
with Session(engine) as session:
# Atualizar rendimento
cliente = session.query(Cliente).filter_by(ID_Cliente=6840104).first()
if cliente:
cliente.Rendimento_anual = 300000
# Excluir cliente
cliente = session.query(Cliente).filter_by(ID_Cliente=5008809).first()
if cliente:
session.delete(cliente)
# Inserir novo cliente
novo_cliente = Cliente(
ID_Cliente=6850985,
Idade=33,
Grau_escolaridade="Doutorado",
Estado_civil="Solteiro",
Tamanho_familia=1,
Categoria_de_renda="Empregado",
Ocupacao="TI",
Anos_empregado=2,
Rendimento_anual=290000,
Tem_carro=0,
Moradia="Casa/apartamento próprio"
)
session.add(novo_cliente)
session.commit()
8. Visualizando os dados atualizados
with Session(engine) as session:
# Verificar cliente atualizado
cliente_atualizado = session.query(Cliente).filter_by(ID_Cliente=6840104).first()
print(cliente_atualizado.__dict__ if cliente_atualizado else "Não encontrado")
# Verificar cliente excluído
cliente_excluido = session.query(Cliente).filter_by(ID_Cliente=5008809).first()
print(cliente_excluido.__dict__ if cliente_excluido else "Não encontrado")
# Verificar cliente inserido
cliente_inserido = session.query(Cliente).filter_by(ID_Cliente=6850985).first()
print(cliente_inserido.__dict__ if cliente_inserido else "Não encontrado")S
Considerações Finais
Utilizar o SQLAlchemy com ORM trouxe mais clareza e facilidade na manipulação do banco de dados, especialmente ao trabalhar com objetos Python em vez de escrever SQL puro. A integração com o Pandas também foi muito útil para carregar os dados iniciais.
No entanto, fico no aguardo do feedback de vocês para validar se segui boas práticas e como posso melhorar:
- Minha definição da classe
Cliente
está adequada? - Há melhores práticas para lidar com exceções ou erros durante as operações?
Agradeço desde já pela colaboração!