2015-04-16 13 views
58

Werfen Sie einen Blick auf diese:Was sollte ich anstelle von Syncdb in Django 1.9 verwenden?

$ pypy ./manage.py syncdb 
/usr/lib64/pypy-2.4.0/site-packages/django/core/management/commands/syncdb.py:24: RemovedInDjango19Warning: The syncdb command will be removed in Django 1.9 
    warnings.warn("The syncdb command will be removed in Django 1.9", RemovedInDjango19Warning) 

(cut) 

ich ein quick google search lief, konnte aber die Antwort nicht finden - was soll ich statt syncdb verwenden?

+2

Eigentlich gelten, dass ich jetzt, dass ich wieder sehen, dann ist es genau dort: 'syncdb ist veraltet und wurde ersetzt durch migrate' – d33tah

Antwort

74

syncdb wegen the migration system in django eingeführt wurden, mit django 1.7 eingeführt ist veraltet.

Jetzt können Sie verfolgen Ihre Änderungen mit makemigrations. Dadurch werden Ihre Modelländerungen in Python-Code umgewandelt, damit sie in anderen Datenbanken bereitgestellt werden können. Wenn Sie weitere Änderungen an der Datenbank vornehmen müssen, können Sie data migrations verwenden.

Nachdem Sie die Migrationen erstellt haben, müssen Sie anwenden sie: migrate.

Also statt syncdb verwenden Sie makemigrations und dann migrate.

-Workflow auf die Entwicklung nach geändert Sie etwas in Ihrem Modelle:

./manage.py makemigrations 
./manage.py migrate 

Und auf dem Produktionssystem:

./manage.py migrate 

Bonus: Sie müssen nicht migrate für jede Änderung ausgeführt werden müssen. Wenn Sie mehrere Änderungen noch nicht angewendet haben, führt django diese in der richtigen Reihenfolge für Sie aus.

+2

Es ist die beste neue Funktion;) – tgdn

+7

HINWEIS: 'makemigrations' erfordert möglicherweise den Modulnamen als Parameter. – d33tah

+0

Das ist ein schrecklicher Ratschlag. Wenn Sie eine App mit einem Dutzend Migrationen in eine leere Datenbank installieren, sollten Sie 'migrate' niemals ausführen, da dies eine enorme Zeitverschwendung darstellt. @Don Mums Antwort ist die richtige Antwort. – Cerin

39

Sie sollten unbedingt migration system verwenden. Damit können Sie Änderungen in Ihrer models.py verfolgen und Migrationen für die Datenbank erstellen. Das Migrationssystem verwendet die Befehle makemigrations zum Erstellen von Migrationen und migrate zum Migrieren der Datenbank.

Wenn aus welchem ​​Grund auch immer Sie benötigen eine Datenbank die gleiche Art und Weise erstellen syncdb es tat es ist Befehl Flag, das migrate bewirkt, dass die gleiche Art und Weise arbeiten. Sie sollten dies nur tun, wenn Sie WIRKLICH es brauchen und Sie wissen, was Sie tun. Zum Beispiel um eine leere Datenbank für ein kontinuierliches Integrationssystem Ihrer Wahl zu erstellen.

python manage.py migrate auth 
# performs migrations for auth and contenttypes contrib apps 

python manage.py migrate --run-syncdb 
# creates the rest of the database 

auf Django 1.9.1 getestet.

+5

+1 für die tatsächliche Lösung, sollte dies die Antwort sein. Während Sie Migrationen für Produktionsfreigaben verwenden sollten, wenn Sie aktiv von Grund auf neu entwickeln, ist es einfacher, die Datenbank einfach zu löschen und neu zu starten, als 500 Migrationen ausführen zu müssen. Ich führe 'dropdb mydb && createdb mydb && python manage.py migrieren --run-syncdb' routinemäßig aus, wenn ich eine Änderung mache. – dotcomly

1

syncdb hat ein Problem mit der Migration von Datenbanken. so, nach django 1.7 wurden makemigrations und migrate eingeführt. Jetzt in Django 1.9 wurde syncdb veraltet. versuchen
1. python manage.py makemigrations erkennt Änderungen in db und erstellt eine .py Datei als interne Migrationsordner 2.python manage.py migrate wird die Migrationen in die Datenbank

Verwandte Themen