2013-06-09 10 views
5

Provare a vedere l'SQL che syncdb genererebbe nel momento attuale.Django richiama l'istruzione sqcdl syncdb per l'aggiornamento dopo le modifiche al codice

Dopo varie ricerche la risposta non era immediatamente evidente - So che è possibile utilizzare:

python manage.py syncdb --sqlall 

rendimenti:

Create the database tables for all apps in INSTALLED_APPS whose tables haven't already been created. 

Come posso produrre i cambiamenti che si sono verificati per l'intera database se il codice è stato modificato?

C'è un modo per generare tutto l'SQL per tutte le app che necessitano di syncdb'ing in questo momento? O ho bisogno solo di dichiarare esplicitamente ogni app? Non sto cercando tutto l'SQL per l'intero sito, solo per le modifiche che sarebbero implementate da un syncdb.

Ho diverse app che hanno bisogno di SQL generato per descrivere i cambiamenti. Potrei elencarli esplicitamente, ma c'è un modo per syncdb per capirlo?

risposta

6

Si può fare

./manage.py sqlall <app_name> 

per ottenere il sql statements and initial data for the app.

Se si desidera solo il sql statements,

./manage.py sql <app_name> 

Ecco un mangement command che stampa sqlall per tutte le applicazioni installate. In alternativa, è possibile scrivere il proprio comando di gestione che ottiene tutte le app installate e chiama lo ./manage.py sql <app_name> per ciascuna.

+0

Grazie kathikr - Ma esiste un modo per generare tutte le istruzioni per tutte le app disponibili adesso?(come faccio clic sul link) –

+1

È possibile specificare più app (separate da spazio) nella riga di comando. Ma non credo che ci sia un posto dove è possibile stampare "ogni" app installata. – karthikr

+0

Sarebbe molto interessato sapere se c'è un modo per produrre tutte le istruzioni per tutte le app - questo è il vero punto della domanda. Revisionerà. Grazie per l'aiuto. –

1

Il pacchetto Django estensioni ha un numero di gestione comandi personalizzati per Django, uno di questi comandi è sqldiff:

https://github.com/django-extensions/django-extensions/blob/master/docs/sqldiff.rst

In primo luogo,

sudo pip install django-extensions 

Successivamente, aggiungere django-estensioni app installate

INSTALLED_APPS = (
    ... 
    'django_extensions', 
    ... 
) 

Quindi, è possibile

python manage.py sqldiff -a 

Ti verrà presentato con un elenco completo delle differenze, così come una lunga lista di istruzioni ALTER TABLE che garantirà tutti i campi sono impostati correttamente (lunghezza, null, non firmato, ecc)

Tutte le tabelle che non vengono creati saranno elencati, e quindi è possibile scaricare il codice SQL per creare utilizzando

python manage.py sqlall {app_label} 

vale la pena notare che, per il nome della colonna cambia, sqldiff tenterà di semplicemente goccia colonne rinominati e cr ne mangia di nuovi al loro posto - Quindi non copiare semplicemente l'intero sqldiff ed eseguirlo contro la produzione senza ispezionarlo.

Problemi correlati