Suivi des versions, automatiser les modifications du schéma de base de données avec Django

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

  •  09-06-2019
  •  | 
  •  

Question

Je regarde actuellement le framework Python Django pour les futures applications Web basées sur une base de données ainsi que pour un portage de certaines applications actuellement écrites en PHP.L'un des problèmes les plus désagréables de mes dernières années a été de suivre les modifications apportées aux schémas de bases de données et de déployer ces modifications sur des systèmes productifs.Je n'ai pas osé demander de pouvoir les annuler également, mais bien sûr, pour les tests et le débogage, ce serait une fonctionnalité intéressante.D'autres questions ici (telles que celui-ci ou celui-ci), je vois que je ne suis pas seul et que ce n'est pas un problème anodin.De plus, j’ai trouvé de nombreuses inspirations dans les réponses.

Maintenant, comme Django semble être très puissant, dispose-t-il d’outils pour vous aider dans ce qui précède ?Peut-être que c'est même dans leur documentation et que je l'ai manqué ?

Était-ce utile?

La solution

Il existe au moins deux utilitaires tiers pour gérer les migrations de schémas de base de données, Sud et Django Évolution.Je n'ai essayé ni l'un ni l'autre, mais j'ai entendu de bonnes choses à propos de South, même si Evolution existe depuis un peu plus longtemps.

Regardez aussi Évolution du schéma sur le wiki Django.C'est juste une page wiki sur la migration de la base de données.

Autres conseils

La dernière fois que j'ai vérifié (version 0.97), syncdb pourra ajouter des tables pour synchroniser votre schéma de base de données avec votre fichier models.py, mais il ne peut pas :

  • Renommez ou ajoutez une colonne sur une base de données peuplée.Vous devez le faire à la main.
  • Refactorisez votre modèle (comme diviser une table en deux) et repeuplez votre base de données en conséquence.

Il serait cependant possible d'écrire un script Django pour effectuer la migration en jouant avec les deux différents gestionnaires, mais cela peut prendre du temps si votre base de données est volumineuse.

Il y a eu une table ronde sur les changements de schéma de base de données lors de la récente DjangoCon ;Il y a un vidéo de la séance (merci à Google), qui devrait fournir des informations utiles sur un certain nombre de ces utilitaires.

Et maintenant il y a aussi migrations.Depuis annonce:

django-evolution tente de résoudre ce problème de manière intelligente, en détectant les modifications apportées aux modèles qui ne sont pas encore reflétées dans le schéma de la base de données et en déterminant ce qui doit être fait pour synchroniser les deux. En revanche, les migrations adoptent une approche stupide :cela vous oblige à indiquer explicitement les modifications dans une séquence de migrations, qui seront appliquées à leur tour pour amener une base de données à l'état le plus récent qui reflète les modèles sous-jacents.

Cela signifie un travail supplémentaire pour les développeurs qui créent des migrations, mais cela rend également l'ensemble du processus complètement transparent : pour nos projets, nous avons décidé d'opter pour le système le plus simple possible.

(Mon gras)

J'ai entendu beaucoup de bien sur Branche d'évolution du schéma Django et c'étaient des opinions d'utilisateurs réels.Il fonctionne généralement hors des sentiers battus et fait ce qu'il doit faire.

Tu devrais chercher Migrations, son fonctionnement est un peu différent de Django-eveoltions.Il vous montre tout ce qu'il fait et pour les choses compliquées il vous demande votre intervention.Ça devrait être génial.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top