Ich habe bereits ein Modell definiert und die zugehörige Datenbank über manager.py syncdb
erstellt. Jetzt, da ich dem Modell einige Felder hinzugefügt habe, habe ich erneut versucht, syncdb
, aber keine Ausgabe erscheint. Beim Versuch, auf diese neuen Felder über meine Vorlagen zuzugreifen, erhalte ich die Ausnahme "Keine solche Spalte", was mich zu der Annahme verleitet, dass syncdb die Datenbank nicht wirklich aktualisiert hat. Was ist der richtige Befehl hier?Update Django-Datenbank, um Änderungen in bestehenden Modellen widerzuspiegeln
Antwort
Scheint wie, was Sie brauchen, ist ein Migrationssystem. South ist wirklich nett, funktioniert gut, hat einige Automatisierungs-Tools, um Ihren Workflow zu erleichtern. Und hat eine tolle tutorial.
Hinweis: syncdb kann Ihre vorhandenen Tabellen nicht aktualisieren. Manchmal ist es unmöglich zu entscheiden, was automatisch zu tun ist - deshalb sind South-Scripts so großartig.
danke für das Aufzeigen dieses interessanten Werkzeugs. Für alle Interessierten gibt es hier eine aufschlussreiche Diskussion über die Migration von Django-Datenbanken: http://code.djangoproject.com/wiki/SchemaEvolution – theactiveactor
Der Link von South zeigt, dass "South veraltet ist. Ab Django 1.7 sind Migrationen integriert der Kern von Django. Wenn Sie eine frühere Version ausführen, können Sie das Repository auf BitBucket finden. ". So was jetzt? – FaithReaper
Links in der Antwort sind gebrochen –
deseb ist ein großartiges Werkzeug dafür.
Wenn Sie es installiert haben, können Sie ./manage.py sqlevolve schreiben und es generiert SQL-Befehle, die notwendig sind, um die Datenbankstruktur mit Ihren Modellen synchron zu halten.
Das sieht aus, als was ich brauchte. Verpflichtet sqlevolve auch die Änderungen? – theactiveactor
Sie müssen Ihre Tabellen löschen, bevor Sie sie mit syncdb
neu erstellen können.
Wenn Sie Ihre vorhandenen Daten beibehalten möchten, müssen Sie die Datenbank entladen, Ihre Tabellen löschen, syncdb
ausführen, um eine neue Datenbank zu erstellen, und dann Ihre alten Daten in Ihre neuen Tabellen laden.
Es gibt Tools, die dabei helfen. In vielen Fällen ist es jedoch genauso einfach, dies manuell zu tun.
Djangos Syncdb ändert keine vorhandenen Tabellen in der Datenbank, so dass Sie es manuell tun müssen. Die Art, wie ich es immer mache ist:
- Ändern Sie zuerst die Modellklasse.
- Dann ausführen: manage.py sql myapp.
- Schauen Sie sich den Ausdruck an und sehen Sie, wie er die Änderung darstellt, die Sie vornehmen werden.
- Nehmen Sie die Änderung manuell mit Ihrem Datenbankmanager vor.
- Überprüfen Sie, ob über die Admin-Site alles korrekt funktioniert hat.
Wenn Sie SQLLite einen guten Manager verwenden, ist die Firefox-Plugin: link
Ich denke eigentlich, das ist die beste und einfachste Lösung – shrimpwagon
Ein weiteres Werkzeug würde django Entwicklung sein. In den meisten Fällen ist kein Tischtrinken erforderlich.
einfach installieren Sie es wie jede andere django app und laufen:
Python manage.py evolve --hint --execute
As of Django 1.7+, built-in migrations support , allows for database schema migrations that preserve data. That's probably a better approach than the solution below.
Eine weitere Möglichkeit, ohne zusätzliche Anwendungen erfordern, Verwenden Sie die integrierten Funktionen manage.py
, um Ihre Daten zu exportieren, die Datenbank zu löschen und die exportierten Daten wiederherzustellen.
Mit den folgenden Methoden werden die Datenbanktabellen für Ihre App aktualisiert, werden jedoch alle in diesen Tabellen vorhandenen Daten vollständig gelöscht. Wenn die Änderungen, die Sie an Ihrem App-Modell vorgenommen haben, Ihr altes Schema nicht beschädigen (Sie haben beispielsweise ein neues, optionales Feld hinzugefügt), können Sie die Daten einfach vorher ausgeben und anschließend erneut laden:
Django 1.4.15 und früher
python manage.py dumpdata <your_app> > temp_data.json
python manage.py reset <your_app>
python manage.py loaddata temp_data.json
Django 1.5 und neuere
python manage.py dumpdata <your_app> > temp_data.json
python manage.py sqlclear <your_app> | python manage.py dbshell
python manage.py syncdb
python manage.py loaddata temp_data.json
(Der Befehl reset
wurde verworfen und dann entfernt, in Django 1.5)
Wenn Ihre Änderungen Ihr altes Schema brechen, funktioniert das nicht - in diesem Fall sind Werkzeuge wie South oder Django Evolution großartig.
Danke dafür. Genau das, wonach ich gesucht habe. –
Ich denke, diese Lösung ist am besten. –
danke, die beste Lösung :) –
Für die Versionen 1.4.1 und oben Benutzer hat den Befehl zu
python manage.py flush
geändert Bitte lesen Sie die official document, bevor es als mit allen Ihre Daten werden gelöscht.
Was ich nicht verstehe ist, dass flush die Datenbank tatsächlich so zurücksetzt, wie es nach der Ausführung von' syncdb' war, aber was ist mit den möglicherweise neu hinzugefügten Feldern ? Sie werden nicht erstellt –
Ab Django 1.7 können Sie dies jetzt mit nativen Migrationen tun. Führen Sie einfach
python manage.py makemigrations <your app name>
python manage.py migrate
- 1. Verwenden von reagieren, um externe Änderungen aus der Datenschicht widerzuspiegeln
- 2. So verfolgen Sie Änderungen bei der Verwendung von update() in Django-Modellen
- 3. Update Änderungen in Datagridview in Access 2016
- 4. Verfolgen der Änderungen seit dem letzten Speichern in Django-Modellen
- 5. Was ist der Befehl, um Migrations-Skript aus bestehenden Sequelize-Modellen zu generieren?
- 6. Update Daten in bestehenden Zeile in MySQL-Datenbank
- 7. Ruby on Rails: Wie migriert man Änderungen an Modellen?
- 8. Mercurial Update überschreibt meine Änderungen anstelle von
- 9. best_in_place - Seite aktualisieren, um Änderungen anzuzeigen
- 10. Wie benenne ich einen bestehenden Menüpunkt um?
- 11. AngularJS Update-Eingang mit zwei Modellen mit onSubmit
- 12. update mysql und Wert zu bestehenden Wert hinzufügen
- 13. Matrixelemente neu gruppieren, um das Spalten- und Zeilenclustering in Naiv Python widerzuspiegeln
- 14. Was wird normalerweise in der Repository-Struktur getan, um die implementierten Einheiten widerzuspiegeln? Diese
- 15. Update-Code und spiegeln die Änderungen in AEM CQ5
- 16. Update HTML-Eingabewert Änderungen in eckigen ng-Modell
- 17. Wie gehe ich mit animierten Modellen in Three.js um?
- 18. Wert hinzufügen, um bestehenden Knoten in Xml mit XSLT
- 19. Ändern einer bestehenden has_many-Beziehung zu polymorph in Rails 3
- 20. Mit Modellen in Magnolie
- 21. django request.GET in Modellen
- 22. Visual Basic - DropDown Text nicht verändert Wert widerzuspiegeln
- 23. Wie man Tupelfelder von Modellen in Django-Modellen speichert?
- 24. Vergleichen von Modellen in Django
- 25. Inkrementelles Update in sqoop
- 26. Ember.ArrayProxy Änderungen nicht auslösen Lenker #ach jedem Update
- 27. Verwenden von Modellen in Django-Rest Framework
- 28. Ändern eines Bildlaufs von UITableView programmatisch, um die Größe einer iPhone-Tastatur widerzuspiegeln
- 29. Visual Studio 2013 Update 4 Änderungen MSFakes Shim Object Standardverhalten
- 30. Benennen von Modellen in zend
Sie sollten die angenommene Antwort ändern. – User