Ciclo de Desenvolvimento com Banco de Dados
O ciclo de desenvolvimento do projeto é feito exclusivamente com PostgreSQL.
Durante o desenvolvimento, o PostgreSQL é tratado como o banco canônico.
Configuração do Banco de Dados (PostgreSQL)
-
Instalar PostgreSQL:
- Windows: https://www.postgresql.org/download/windows/
- Linux:
sudo apt install postgresql - macOS:
brew install postgresql
-
Criar banco de dados:
CREATE DATABASE simulador_financeiro; -
Configurar
.env:POSTGRES_DATABASE_URL=postgresql+psycopg://postgres:sua_senha@localhost:5432/simulador_financeiro -
Iniciar a aplicação:
python main.py
As tabelas serão criadas automaticamente se não existirem.
Ciclo de Desenvolvimento
O fluxo de trabalho para alterações no banco de dados é:
- ✏️ Editar o schema no PostgreSQL (via ferramenta gráfica ou SQL manual)
- 📥 Sincronizar o banco local (tabelas e relações atualizadas)
- 🧬 Gerar modelos ORM com
sqlacodegen(quando fizer sentido) - 🛠️ Ajustar modelos manualmente quando a alteração for pequena
Passo 1: Editar o Schema no PostgreSQL
Você pode editar o schema usando ferramentas como pgAdmin ou DataGrip, ou editar manualmente via SQL.
Opção A: Ferramentas gráficas
- Edite as tabelas, colunas e relações na ferramenta
- Aplique as mudanças no banco local
Opção B: SQL manual
- Edite o SQL das tabelas e relações
- Execute os comandos diretamente no banco local
Passo 2: Sincronizar o banco local
Se as alterações foram feitas via ferramenta gráfica, elas já são aplicadas no banco local.
Se foram feitas manualmente, execute os scripts SQL:
psql -U postgres -d simulador_financeiro -f schema_changes.sql
Passo 3: Gerar ORM com sqlacodegen
O sqlacodegen lê o schema existente no banco de dados e gera automaticamente os modelos SQLAlchemy.
Instalação:
pip install sqlacodegen
Gerar modelos:
sqlacodegen postgresql+psycopg://postgres:<senha>@localhost:5432/simulador_financeiro > backend/core/models/models.py
Substitua <senha> pela senha do seu banco PostgreSQL.
O sqlacodegen é mais útil quando há mudanças grandes no schema.
Para alterações pequenas, normalmente é melhor editar diretamente o arquivo backend/core/models/models.py.
O código gerado pelo sqlacodegen serve como ponto de partida e deve ser revisado..
É comum ajustar manualmente:
- Relacionamentos
- Enums
- Tipos customizados
- Defaults e constraints
Criação Automática de Tabelas
O projeto cria automaticamente as tabelas em ambientes limpos ou no primeiro run, com base nos modelos ORM:
Base.metadata.create_all(bind=engine)
Isso é útil para:
- Primeiro setup
- Ambientes de teste
No desenvolvimento contínuo com PostgreSQL, o schema deve ser tratado como database-first.
Dicas e Boas Práticas
Evite SQL Raw
Sempre que possível, use o ORM do SQLAlchemy.
Evite:
session.execute("SELECT * FROM users WHERE id = 1")
Prefira:
session.get(User, 1)
ou, em consultas mais complexas:
stmt = select(User).where(User.id == 1)
session.execute(stmt).scalar_one_or_none()