web-dev-qa-db-fra.com

django 1.7 migrations - comment effacer toutes les migrations et recommencer à zéro?

Je suis donc en train d'itérer rapidement sur une application Django en ce moment et j'ajuste constamment models.py. Au cours d'une journée ou deux de programmation et de test, je génère quelques dizaines de migrations fichiers. Parfois, je déchire vraiment le schéma et le refais complètement. Cela provoque le processus de migration se plaindre beaucoup sur les valeurs par défaut et les valeurs nulles et ainsi de suite. Si possible, je voudrais juste effacer toutes les -démarrer les migrations maintenant que je sais enfin ce que je fais. Mon approche jusqu'à présent a été la suivante:

  1. supprimez tout dans le dossier des migrations à l'exception de __init__.py.
  2. déposer dans ma console PostgreSQL et faire: DELETE FROM south_migrationhistory WHERE app_name='my_app';
  3. dans la console PostgreSQL, supprimez toutes les tables associées à my_app.
  4. réexécuter ./manage.py makemigrations my_app - cela génère un 0001_initial.py fichier dans mon dossier de migrations.
  5. courir ./manage migrate my_app - Je m'attends à ce que cette commande reconstruise toutes mes tables, mais à la place, elle dit: "Aucune migration à appliquer."

Ce qui donne?

Est également le south_migrationhistory table de base de données toujours en jeu maintenant que j'ai vidé le sud et que je suis passé à Django 1.7?

Merci.

39
jononomo

Ainsi, le plan pas à pas décrit dans ma question fonctionne, mais au lieu de supprimer des lignes de south_migrationhistory table de base de données, j'ai dû supprimer des lignes du Django_migrations table de base de données.

La commande est: DELETE FROM Django_migrations WHERE app='my_app'

Une fois cela fait, vous pourrez réexécuter vos migrations à partir de zéro.

34
jononomo

Je voulais juste mettre toutes les étapes dans un format de commande:

NOTE: Les commandes ci-dessous sont assez destructrices, c'est un moyen de start from scratch comme l'OP l'a demandé.

Après un commentaire de mikeb j'ai pensé ajouter cette ligne:

PRE - VÉRIFIEZ LES FICHIERS QUE VOUS VOULEZ SUPPRIMER

find . -path *migrations* -name "*.py" -not -path "*__init__*"

Ensuite, ajustez la commande à l'étape 1 à un qui fonctionne pour votre environnement de développement.

  1. supprimez toutes les migrations de toutes les applications:
find . -path *migrations* -name "*.py" -not -path "*__init__*" -exec rm {} \; # make sure to be in your projects path
  1. recréer toute la base de données:
Sudo -u postgres bash -c "psql -c \"DROP DATABASE rootedin;\""
Sudo -u postgres bash -c "psql -c \"CREATE DATABASE rootedin;\""
Sudo -u postgres bash -c "psql -c \"GRANT ALL PRIVILEGES ON DATABASE rootedin to vagrant;\"" # vagrant is my current user
  1. mettre à jour votre base de données:
python3 manage.py makemigrations
python3 manage.py migrate
20
mimoralea