Ok, donc cela semble être une chose vraiment stupide à demander, et je suis sûr que je manque quelque chose quelque part.
Comment effectuez-vous une migration vers l'arrière en utilisant South sur Django?
J'ai donc peaufiné mes modèles, créé une migration avec schemamigration
, exécuté la migration avec migrate
, et maintenant je réalise que ce n'est pas tout à fait ce que je voulais et je le veux comme avant.
À moins de modifier manuellement les tables db et de supprimer les fichiers de migration, comment dois-je procéder pour annuler la migration? Je trouve des références à des migrations en arrière utilisant South via Google, mais je n'ai pas encore trouvé d'exemple de code solide pour cela.
Quelqu'un peut-il aider?
django
migration
django-south
Ruiwen
la source
la source
Réponses:
Vous devez déterminer le numéro de la migration juste avant celui que vous souhaitez annuler.
Votre application doit avoir un répertoire de migrations, avec des fichiers nommés comme
Normalement, lorsque vous exécutez
./manage.py migrate your_app
, South exécute toutes les nouvelles migrations, dans l'ordre. (Il examine les tables de la base de données pour décider lesquelles sont «nouvelles»).Cependant, vous pouvez également spécifier toute migration par numéro, et South fera migrer votre base de données, vers l'avant ou vers l'arrière , pour l'amener à ce point. Donc, avec les fichiers d'exemple ci-dessus, si vous avez déjà migré jusqu'à 0003 et que vous vouliez exécuter 0003 en sens inverse (l'annuler, en fait), vous exécuteriez
South examinerait la base de données, se rendrait compte qu'elle a déjà exécuté 0003 et déterminerait qu'elle doit exécuter la migration inverse pour 0003 afin de revenir à 0002.
la source
Juste au cas où quelqu'un (comme moi) se demanderait comment revenir de l'initiale (0001) :
production:
"zéro" est un état spécial avant toute migration.
Référence: http://south.aeracode.org/docs/commands.html
la source
migrate 0000
ne fonctionnait pas. À propos de la fausse migration, oui, vous en aurez peut-être besoin, si vous devez par exemple annuler uniquement la migration initiale (probablement erronée), mais l'historique de la migration pense que cette migration n'a jamais eu lieu.Ajoutez un nom de migration à la fin des paramètres:
la source
00xx
- est suffisant. Lorsque vous améliorez et testez une migration, vous pouvez avoir les deux commandes dans l'historique: en avant (sans argument), en arrière avec le numéro d'état précédent.