Migrações no Django: makemigrations e migrate resolve um problema recorrente em projetos Python: Versione a evolução do schema junto com os modelos e aplique a mesma sequência em cada ambiente. Este guia mostra o mecanismo, um exemplo executável e os limites que evitam uma implementação frágil.

Conceito e caso de uso

makemigrations compara modelos com o estado histórico dos arquivos; migrate aplica a sequência segundo o grafo de dependências.

Para revisar os fundamentos relacionados, consulte também o guia de Django. A integração fica mais simples quando cada função recebe dependências e dados explicitamente, em vez de depender de estado global.

Exemplo prático

python manage.py makemigrations billing --name add_invoice_status
python manage.py sqlmigrate billing 0007
python manage.py migrate --plan
python manage.py migrate
python manage.py showmigrations billing

Revise o arquivo e o SQL, teste com cópia representativa e faça mudanças incompatíveis em etapas compatíveis entre versões da aplicação.

Decisões importantes

A escolha correta depende do contrato público, do volume e do comportamento em caso de falha.

Considere como a solução se comporta sob concorrência, entradas vazias e falhas parciais. Documente qualquer limite que afete consumidores e mantenha nomes que expressem a intenção.

Erros comuns

O exemplo mínimo não substitui limites, tratamento de erros e observabilidade. Não edite tabelas manualmente nem gere migrações separadamente em produção. Defaults que reescrevem tabelas grandes exigem planejamento.

Evite capturar exceções sem contexto ou retornar resultados parciais como se fossem completos. Uma falha explícita costuma ser mais segura que dados silenciosamente incorretos.

Como validar

Valide o comportamento, não apenas a linha feliz. Rode migrate --plan, aplique em staging, teste reversão quando suportada e confirme o estado com showmigrations.

A documentação oficial, consultada em 28 de julho de 2026, detalha a API e deve ser a referência para mudanças futuras.