Django: migrate Tabelle 'forum_user' existiert bereits

8

Ich habe die Django-Modelle geändert und benutze Django schemamigration , um die Datenbank zu aktualisieren. Aber wenn ich python manager.py migrate app mache, wird folgende Fehlermeldung ausgegeben:

%Vor%     
mike 21.02.2012, 07:45
quelle

2 Antworten

26

Dann ist die Tabelle, die django south zu erstellen versucht, bereits vorhanden und entspricht nicht dem Status Ihrer Datenbank.

Wenn Sie das erste Mal migrieren, denken Sie daran, dass Sie vor der Änderung der Schemamigration den Anfangszustand über schemamigration myapp --initial und migrate app --fake festlegen müssen, damit die Datenbank dem Status der südlichen Datenbank entspricht.

manage.py convert_to_south myapp macht das obige auch als bequeme Methode.

Um zu beginnen mit Süden ...

  1. Stellen Sie sicher, dass Ihre django-Tabellen genau mit Ihren aktuellen Datenbanktabellen übereinstimmen. Wenn Sie Spalten hinzufügen oder entfernen möchten, müssen Sie diese auskommentieren.
  2. Führen Sie python manage.py Schemamigration myapp --initial
  3. aus
  4. Führen Sie python manage.py migrate myapp --fake
  5. aus
  6. Nehmen Sie Änderungen an Ihrem django-Modell vor
  7. Führen Sie python manage.py Schemamigration myapp --auto
  8. aus
  9. Führen Sie python manage.py migrate myapp
  10. aus

Aktualisieren

Hinweis django 1,7+ Schiffe mit Migrationen und Süden wird nicht mehr verwendet.

Es sind nur zwei Befehle erwähnenswert.

  • manage.py makemigrations (handles --initial)
  • manage.py migrieren

Geschrieben vom selben Autor wie South, crowd funded. Geh django.

    
Yuji 'Tomita' Tomita 21.02.2012, 07:51
quelle
0

Ich habe gerade ein doppeltes Tabellenproblem lokal behoben und wollte meinen Workflow dokumentieren, um anderen zu helfen.

Der Schlüssel zum Erfolg war das Erstellen einer --empty -Migration, bevor die neuen Modelle hinzugefügt werden. Der Fluss:

  • Zusammengefasst in einer anderen Person, die Informationen zu einem Modell, das ich lokal habe, ausgeschlossen hat.
  • normal schemamigration --auto fügte erneut eine Tabelle / ein Modell hinzu und verursachte "bereits exists error".
  • Gelöst durch Kommentieren des neuen Modells und Ausführen einer leeren Migration über clear; python manage.py schemamigration --empty APPNAME MIGRATION_FILE_NAME . Dies erzeugt eine "Deklaration" des Zustands der Modelle ohne Vorwärts / Rückwärts-Befehle. Seien Sie 100% sicher, dass der aktuelle Status der Modelle (Python-Dateien) und der Datenbank synchron ist !!! Diese aktuellste Migration wird für die Erstellung eines Differenzials verwendet, um korrekt zu migrieren (next).
  • Kommentieren Sie das neue Modell und führen Sie clear; python manage.py schemamigration APPNAME --auto aus, um die wahre und die gewünschte Differenz zu erstellen (verwendet die soeben erstellte --empty -Migration). Die neue Migration verfügt über Vorwärts- / Rückwärtsbefehle, die für Ihr neues Modell geeignet sein sollten. Rückblick ...
  • endet mit clear; python manage.py migrate

Die gelernte Lektion ist, dass --auto die letzte APP + Migrationsdatei betrachtet, um einen Vorwärts- / Rückwärtsvergleich zu erstellen. Wenn die letzte Migration im Wörterbuch NICHT ein Modell enthält, das Sie in DB haben, wird es erneut erstellt, was zu einem "bereits vorhanden" -Fehler führt. Stellen Sie sich das Wörterbuch als einen Vertrag zwischen Django und der DB vor: "Hier ist, wie alles aussehen soll". Die Migration kann Befehle enthalten, die doppelte Tabellen erstellen und nur während des Befehls '' migrieren '' angezeigt werden.

Die obigen Informationen sollten das Problem beheben. Präsentiert teilweise um Menschen zu helfen und auch für eine Überprüfung, falls ich etwas Dummes mache.

    
Data Mafia LLC 26.05.2015 17:32
quelle

Tags und Links