webentwicklung-frage-antwort-db.com.de

django 1.7 Migrationen - Wie lösche ich alle Migrationen und beginne von vorne?

Daher arbeite ich gerade schnell an einer Django= App und passe models.py ständig an. Im Laufe von ein oder zwei Tagen des Programmierens und Testens generiere ich ein paar Dutzend Migrationen Dateien. Manchmal reiße ich das Schema wirklich auseinander und führe es komplett neu aus. Dies führt dazu, dass sich der Migrationsprozess über Standardwerte und Nullwerte usw. beschwert. Wenn möglich, möchte ich nur das gesamte Migrationsmaterial zerkratzen und erneut ausführen -Starten Sie die Migrationen jetzt, wo ich endlich weiß, was ich tue. Mein bisheriger Ansatz war der folgende:

  1. lösche alles im Migrationsordner mit Ausnahme von __init__.py.
  2. gehe in meine PostgreSQL Konsole und mache: DELETE FROM south_migrationhistory WHERE app_name='my_app';
  3. löschen Sie an der PostgreSQL-Konsole alle mit my_app verknüpften Tabellen.
  4. wiederhole ./manage.py makemigrations my_app - dies erzeugt ein 0001_initial.py Datei in meinem Migrationsordner.
  5. lauf ./manage migrate my_app - Ich erwarte, dass dieser Befehl alle meine Tabellen neu erstellt, aber stattdessen heißt es: "Keine Migrationen anzuwenden."

Was gibt?

Ist auch das south_migrationhistory Datenbanktabelle noch im Spiel, nachdem ich nach Süden gewechselt bin und auf Django 1.7?

Vielen Dank.

39
jononomo

Der in meiner Frage beschriebene Schritt-für-Schritt-Plan funktioniert also, aber anstatt Zeilen aus der Datenbanktabelle south_migrationhistory Zu löschen, musste ich Zeilen aus der Datenbanktabelle Django_migrations Löschen.

Der Befehl lautet: DELETE FROM Django_migrations WHERE app='my_app'

Sobald dies erledigt ist, können Sie Ihre Migrationen von Grund auf neu ausführen.

34
jononomo

Ich wollte nur alle Schritte in ein Befehlsformat bringen:

ANMERKUNG: Die folgenden Befehle sind ziemlich destruktiv, es ist ein Mittel, um start from scratch Als das OP gefragt.

Nach einem Kommentar von mikeb dachte ich, diese Zeile hinzuzufügen:

PRE - PRÜFEN SIE, WELCHE DATEIEN SIE LÖSCHEN WÜRDEN

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

Passen Sie dann den Befehl in Schritt 1 An einen Befehl an, der für Ihre Entwicklungsumgebung geeignet ist.

  1. entfernen Sie alle Migrationen von allen Apps:
find . -path *migrations* -name "*.py" -not -path "*__init__*" -exec rm {} \; # make sure to be in your projects path
  1. erstellen Sie die gesamte Datenbank neu:
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. bring deine Datenbank auf den neuesten Stand:
python3 manage.py makemigrations
python3 manage.py migrate
20
mimoralea