Rastreamento de versão, automatize alterações no esquema do banco de dados com Django

StackOverflow https://stackoverflow.com/questions/20021

  •  09-06-2019
  •  | 
  •  

Pergunta

Atualmente estou olhando para o framework Python Django para futuros aplicativos da web baseados em banco de dados, bem como para uma versão de alguns aplicativos atualmente escritos em PHP.Um dos problemas mais desagradáveis ​​durante meus últimos anos foi acompanhar as alterações no esquema do banco de dados e implantar essas alterações em sistemas produtivos.Não ousei pedir para desfazê-los também, mas é claro que para testar e depurar isso seria um ótimo recurso.De outras perguntas aqui (como Este ou Este), posso ver que não estou sozinho e que este não é um problema trivial.Além disso, encontrei muitas inspirações nas respostas lá.

Agora, como o Django parece ser muito poderoso, ele possui alguma ferramenta para ajudar com o que foi dito acima?Talvez esteja até em seus documentos e eu perdi?

Foi útil?

Solução

Existem pelo menos dois utilitários de terceiros para lidar com migrações de esquema de banco de dados, Sul e Evolução do Django.Não experimentei nenhum deles, mas ouvi algumas coisas boas sobre o Sul, embora o Evolution já exista há um pouco mais de tempo.

Além disso, olhe para EsquemaEvolução no wiki do Django.É apenas uma página wiki sobre a migração do banco de dados.

Outras dicas

Da última vez que verifiquei (versão 0.97), o syncdb poderá adicionar tabelas para sincronizar seu esquema de banco de dados com seu arquivo models.py, mas não pode:

  • Renomeie ou adicione uma coluna em um banco de dados preenchido.Você precisa fazer isso manualmente.
  • Refatore seu modelo (como dividir uma tabela em duas) e preencha novamente seu banco de dados de acordo.

Talvez seja possível escrever um script Django para fazer a migração brincando com os dois diferentes gerentes, mas isso pode levar muito tempo se o seu banco de dados for grande.

Houve uma sessão de painel sobre mudanças no esquema do banco de dados na recente DjangoCon;existe um vídeo da sessão (graças ao Google), que deve fornecer algumas informações úteis sobre vários desses utilitários.

E agora também há migrações.De anúncio:

django-evolution tenta resolver esse problema de maneira inteligente, detectando alterações em modelos que ainda não estão refletidas no esquema do banco de dados e descobrindo o que precisa ser feito para sincronizar os dois novamente. Em contraste, a dmigrations adota uma abordagem estúpida:exige que você declare explicitamente as alterações em uma sequência de migrações, que serão aplicadas por sua vez para trazer um banco de dados ao estado mais recente que reflete os modelos subjacentes.

Isso significa trabalho extra para os desenvolvedores que criam migrações, mas também torna todo o processo completamente transparente – para nossos projetos, decidimos usar o sistema mais simples que pudesse funcionar.

(Meu negrito)

Eu ouvi muitas coisas boas sobre Ramo de evolução do esquema Django e essas eram opiniões de usuários reais.Geralmente funciona imediatamente e faz o que deve fazer.

Você deveria pesquisar Dmigrações, funciona um pouco diferente das evoluções do Django.Mostra tudo o que está fazendo e para coisas complicadas pede sua intervenção.Deveria ser ótimo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top