2012-07-18 10 views
10

Voglio fare una discarica in django indipendentemente dal database che sto usando e posso essere caricato in seguito. Il comando 'dumpdata' è perfetto per questo, ma sta stampando l'output su console. Più che altro lo chiamo utilizzando la funzione call_command, quindi non posso memorizzare il suo contenuto in nessuna variabile dato che stampa l'output su console.Come creare db dumpfile in django

Per favore fatemi sapere come memorizzare il dump su un file usando dumpdata o qualsiasi altro comando o api.

Grazie

+0

ho letto male la tua domanda inizialmente, ma ho aggiunto una risposta che utilizza call_command . – bouteillebleu

+0

ya grazie mille comunque, ha aiutato molto :) –

risposta

18

È possibile scegliere un file da mettere l'output di DumpData in se si chiama dal di dentro Python usando call_command, ad esempio:

from django.core.management import call_command 

output = open(output_filename,'w') # Point stdout at a file for dumping data to. 
call_command('dumpdata','model_name',format='json',indent=3,stdout=output) 
output.close() 

Tuttavia, se si tenta di chiamare questo dalla riga di comando con per esempio --stdout=filename.json alla fine del comando dumpdata, restituisce l'errore manage.py: error: no such option: --stdout.

Quindi è lì, devi solo chiamarlo all'interno di uno script Python piuttosto che sulla riga di comando. Se lo vuoi come opzione da linea di comando, il reindirizzamento (come altri hanno suggerito) è la soluzione migliore.

+0

grazie questo è quello che voglio .... –

+9

Ottima risposta! Ma il rientro = 3 ?? Stai rompendo il mio cuore di pitone con quattro schede spaziali. – Civilian

0

In Linux, si può solo pipe l'output della console in un file.

manage.py DumpData> file

4

django-admin.py dumpdata

Uscite standard output tutti i dati nel database associato l'applicazione denominata (s).

Come sapete, è possibile redirect standard di output in un file:

command > file.data 
+0

Questa è la migliore risposta a mio parere perché risponde al suo problema principale: "Per favore fatemi sapere come memorizzare il dump su un file usando dumpdata o qualsiasi altro comando o API". L'uso del built-in di linux sembra del tutto appropriato. – raiderrobert

12

Basta usare in quel modo:

./manage.py dumpdata > data_dump.json 

Dopo che l'azione, ci sarà data_dump.json file in la directory in cui hai eseguito quel comando.

Ci sono diverse opzioni in arrivo, ma probabilmente lo sapete già. La cosa che devi sapere è come reindirizzare l'output dall'output standard in qualche file: esegui quell'azione mettendo > prima del nome del file.

Per aggiungere qualcosa al file si utilizza >>, ma poiché si stanno scaricando i dati da Django e l'output è molto probabilmente JSON, non lo si vuole (perché renderà JSON non valido).

+0

puoi dirmi come farlo senza utilizzare il reindirizzamento, ricorda che dipende dalla piattaforma –

+0

@ParitoshSingh Il reindirizzamento con> funziona in Unix (e quindi OS X) e in Windows; ci sono altre piattaforme su cui stareste correndo? – bouteillebleu

+0

@bouteillebleu ofcourse mi piacerebbe renderlo indipendente dalla piattaforma, cioè perché sto usando i dati di django dump, se fosse stato il caso avrei scritto facendo dumpfile specifico per db sto usando .... –

1

Come menzionato nello docs, per scaricare dataset di grandi dimensioni è possibile evitare le sezioni che causano problemi e trattarle separatamente.

Il seguente comando non funziona in generale:

python manage.py dumpdata --exclude auth.permission --exclude contenttypes > db.json 

python manage.py loaddata db.json 

Nel caso in cui è possibile esportare i dati in seguito esclusi:

python manage.py dumpdata auth.permission > auth.json 

python manage.py loaddata auth.json 
Problemi correlati