it-swarm.com.de

django syncdb und ein aktualisiertes modell

Ich habe kürzlich mein Modell aktualisiert und ein BooleanField hinzugefügt. Wenn ich jedoch python manage.py syncdb tue, wird das neue Feld nicht zur Datenbank für das Modell hinzugefügt. Wie kann ich das beheben?

85
Hellnar

Ab Django 1.7

Django hat eingebaute Unterstützung für Migrationen - siehe die Dokumentation .

Für Django 1.6 und früher

Django unterstützt keine Migrationen aus der Box. Es gibt eine steckbare App für Django, die genau das tut, und sie funktioniert hervorragend. Es heißt Süd .

100
Dominic Rodger

Django macht dies derzeit nicht automatisch. Ihre Optionen sind:

  1. Löschen Sie die Tabelle aus der Datenbank und erstellen Sie sie mit syncdb in neuem Format.
  2. Drucken Sie SQL für die Datenbank mit python manage.py sql (appname) aus, suchen Sie die hinzugefügte Zeile für das Feld und fügen Sie sie manuell mit dem alter table SQL-Befehl hinzu. (Auf diese Weise können Sie auch Werte des Felds für Ihre aktuellen Datensätze auswählen.)
  3. Verwenden Sie South (per Dominic's Antwort ).
14
che

Folge diesen Schritten:

  1. Exportieren Sie Ihre Daten mit dem Befehl dumpdata management in ein Gerät
  2. Lass den Tisch fallen
  3. Führen Sie syncdb aus
  4. Laden Sie Ihre Daten mit dem Befehl loaddata management erneut vom Gerät
11
Soviut

Wie in der ersten Antwort vorgeschlagen, habe ich versucht, South zu verwenden, und nach einer Stunde Frustration mit obskure Migrationsfehlern entschied ich mich stattdessen für Django Evolution .

Ich denke, es ist einfacher, als mit South zu beginnen, und es hat perfekt funktioniert, als ich ./manage.py evolve --hint --execute das erste Mal eingegeben habe, also bin ich zufrieden damit.

8
Dan Abramov

Havent hat Django schon eine Weile benutzt, aber ich denke daran, dass syncdb Änderungsbefehle für db-Tabellen ausführt. Sie müssen die Tabelle löschen und dann erneut ausführen, und es wird erneut erstellt.

edit: Entschuldigung führt KEINE Änderung durch.

2
Alex H

In Django 1.6

  • Zuerst haben wir ausgeführt - python manage.py sql <app name>

  • Dann müssen wir laufen - python manage.py syncdb

Wenn Sie Django mit Apache und MySQL ausführen, starten Sie Apache nach der Migration mit makemigrations neu.

0
Felipe Perry