Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Projeto] Manipulação de Banco de Dados com SQLAlchemy ORM – Feedback Solicitado

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:

  1. Criar um banco de dados local com SQLAlchemy.
  2. Carregar os dados de um arquivo CSV nesse banco.
  3. Realizar três operações:
    • Atualizar o rendimento anual do cliente com ID 6840104 para 300000.
    • Excluir o cliente com ID 5008809.
    • Inserir um novo cliente conforme especificação dada.

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í