web-dev-qa-db-fra.com

Django: Supprimer en toute sécurité les vieilles migrations?

J'ai un Django application avec beaucoup de migrations obsolètes. J'aimerais supprimer les vieilles migrations et commencer fraîche.

L'application a 14 dossiers de "migrations" différentes.

Voici ce que quelques-uns d'entre eux ressemblent à:

enter image description here

enter image description here

enter image description here

Est-il sûr de supprimer tout le contenu de chacun de ces dossiers? Ou, dois-je vous assurer de supprimer uniquement certains des fichiers - et si oui quels fichiers?

4
VikR
  1. Les fichiers JSON et JS ne sont pas liés au Django Migrations ainsi que sur le dossier __pycache__. Vous pouvez tout supprimer.
  2. Si vous voulez dire "Appliqué précédemment et que le projet n'a plus besoin que le projet n'a besoin que de la dernière version des migrations" Vous ne souhaitez pas supprimer, mais squash eux à la place de squashmigrations qui réduit les fichiers que vous réduisez Demandez à deux, Dossier Init et au fichier de migration initial, de cette façon que votre projet fonctionne toujours.
  3. Si, en supprimant que vous voulez dire que vous n'avez plus besoin d'eux parce que vous avez déjà changé les modèles que les migrations précédentes ne sont même pas utilisées autres que d'être appliquées et non appliquées sans jamais être utilisée, ne la matière, aller à l'étape 2 et faire cela au lieu de supprimer les fichiers manuellement. Lorsque vous créez des migrations sur vos applications un par un, vous créez également une arborescence de dépendance migratoire, bien, Django fait. Et il est vraiment difficile de garder une trace d'après un certain point, si vous essayez de tout supprimer, vous pouvez créer de nouveaux fichiers de migration avec facilité, croyez-moi comme une personne qui a vécu autrement, cela ne fonctionne pas comme ça . C'est de manière plus simple de laisser =Django Gérer la migration Squashing, il optimise la migration qui signifie qu'il supprime également les personnes non utilisées dans votre état final.

Plus à lire à l'adresse suivante: https://docs.djangoproject.com/fr/2.2/topics/migrations/#migration-squashing

2
Işık Kaplan

lorsque vous importez une troisième application:

il y a 2 étapes désinstaller

l'application 'django_celey_bat' est utilisée par exemple.

étape 1: Table propre

python .\manage.py migrate Django_celery_beat zero

étape 2: Supprimer l'application de Installation_Apps

il y a fait !!!

ceci est Django document à ce sujet.

0
rogers.wang

Après avoir marqué l'une des réponses fournies précédemment comme étant acceptée, voici un résumé de quelques points que j'ai appris:

  • Suppression Django Migrations est généralement une mauvaise idée.
  • Django garde une trace de ce qui est dans votre DB à travers ces fichiers de migration, ainsi que via une table qu'elle crée dans votre dB, et si vous supprimez l'une de ces informations Django commencera à lancer des erreurs sur migrate qui peut être difficile à réparer.

Je reçois certaines de ces erreurs difficiles à réparer. Voici ce que j'ai fait pour le réparer:

  • Ran migrate sur le serveur de production.
  • Quand j'ai eu une erreur, cela me dirait comment le DB était hors de synchronisation avec ce que Django attendu. J'ai corrigé cela manuellement en édité directement la DB avec un client SQL.
  • Par exemple. Si cela a indiqué qu'une clé n'existait pas non plus d'exister, j'ai supprimé l'index pertinent de la table indiquée.
  • Ou si cela a indiqué qu'une table n'existait pas cela n'était pas censé exister, j'ai sauvegardé la table dans un fichier et supprimé la table. Migrate a ensuite créé la table, puis je le reprogramme avec des données de la sauvegarde.
  • Dans le cas de tables de plusieurs à plusieurs, une fois Django==== les avait ré-créés, j'ai supprimé toutes les nouvelles tables créées par Django et les restauré d'une sauvegarde créée sur mon système de développement local , qui avait déjà eu toutes les dernières migrations qui y sont exécutées.

Finalement, j'ai pu compléter toutes les migrations avec succès.

J'ai l'impression que j'ai eu la chance et ce qui précède ne fonctionnera pas dans tous les cas! J'ai beaucoup appris sur Django et migrations et fera beaucoup plus attention à cela à l'avenir.

0
VikR