2015-04-16 23 views
58

Date un'occhiata a questo:Cosa dovrei usare al posto di syncdb in Django 1.9?

$ 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) 

ho eseguito una quick google search, ma non riusciva a trovare la risposta - che cosa dovrei usare al posto di syncdb?

+2

In realtà, ora che ho che io guardo di nuovo, è proprio lì: 'syncdb è stato deprecato e sostituito da migrate' – d33tah

risposta

74

syncdb è sconsigliato a causa della the migration system, introdotte con django 1.7.

Ora è possibile traccia le modifiche utilizzando makemigrations. Questo trasforma le modifiche del modello in codice python per renderle distribuibili su un altro database. Quando hai ulteriori modifiche che devi applicare al database, puoi utilizzare data migrations.

Dopo aver creato le migrazioni, è necessario applicare: migrate.

Quindi invece di utilizzare syncdb è necessario utilizzare makemigrations e quindi migrate.

flusso di lavoro sullo sviluppo dopo aver cambiato qualcosa nei tuoi modelli:

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

E sul sistema di produzione:

./manage.py migrate 

Bonus: non c'è bisogno di correre migrate per ogni modifica. Se non sono state applicate più modifiche, django le eseguirà nell'ordine corretto per te.

+2

E ' la migliore nuova caratteristica;) – tgdn

+7

NOTA: 'makemigrations' potrebbe richiedere il nome del modulo come parametro. – d33tah

+0

Questo è un consiglio terribile. Se stai installando un'app con una dozzina di migrazioni in un database vuoto, non devi mai eseguire "migrate" perché sarà un'enorme perdita di tempo. @Don Mums answer è la risposta corretta. – Cerin

39

Si consiglia di utilizzare migration system. Che ti consente di tenere traccia delle modifiche nel tuo models.py e di creare migrazioni per il database. Il sistema di migrazione utilizza i comandi makemigrations per creare migrazioni e migrate per migrare il database.

Se per qualsiasi motivo è necessario creare un database allo stesso modo di syncdb, è presente un flag di comando che fa sì che migrate funzioni allo stesso modo. Dovresti farlo solo se hai REALE e sai cosa stai facendo. Ad esempio per creare un database vuoto per un sistema di integrazione continua di tua scelta.

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 

Testato su Django 1.9.1.

+5

+1 per la soluzione reale, questa dovrebbe essere la risposta. Mentre è necessario utilizzare le migrazioni per le versioni di produzione quando si sviluppa attivamente da zero, è più facile eliminare il DB e ricominciare da capo rispetto a eseguire 500 migrazioni. Eseguo di routine 'dropdb mydb && createdb mydb && python manage.py migrano --run-syncdb' ogni volta che apporto una modifica. – dotcomly

1

syncdb ha qualche problema con la migrazione di db. così, dopo che django 1.7 makemigrations e migrate sono stati introdotti. Ora in django 1.9 syncdb è stato deprecato. try
1. python manage.py makemigrations che rileva le modifiche in db e crea un file .py all'interno della cartella migrazioni 2.python manage.py migrate applicherà le migrazioni al database

Problemi correlati