2012-07-18 15 views
10

Quiero hacer un volcado en django independientemente de la base de datos que estoy usando y que pueda cargarse más tarde. El comando 'dumpdata' es perfecto para esto, pero está imprimiendo en la consola. Además, lo estoy llamando usando la función call_command, por lo que no puedo almacenar su contenido en ninguna variable, ya que está imprimiendo en la consola.Cómo hacer db dumpfile en django

Por favor, hágame saber cómo almacenar en un archivo utilizando dumpdata o cualquier otro comando o api.

Gracias

+0

leí mal su pregunta al principio, pero he añadido una respuesta que utiliza call_command . – bouteillebleu

+0

ya muchas gracias de todos modos, me ayudó mucho :) –

Respuesta

18

Usted puede elegir un archivo para poner la salida de dumpdata en si se llama desde dentro Python usando call_command, por ejemplo:

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

Sin embargo, si se intenta llamar a esto desde la línea de comandos p.ej --stdout=filename.json al final de su comando dumpdata, da el error manage.py: error: no such option: --stdout.

Así que está allí, solo tiene que llamarlo dentro de un script de Python en lugar de en la línea de comandos. Si lo quiere como una opción de línea de comando, entonces la redirección (como otros han sugerido) es su mejor opción.

+0

gracias esto es lo que quiero .... –

+9

¡Gran respuesta! ¿Pero sangría = 3? Estás rompiendo mi corazón de pitón con pestañas de 4 espacios. – Civilian

0

En Linux, sólo puede canalizar la salida de la consola a un archivo.

dumpdata manage.py> archivo

4

django-admin.py dumpdata

salidas a la salida estándar todos los datos en la base de datos asociada a la aplicación (s) nombrado.

Como saben, puede redirect salida estándar a un archivo:

command > file.data 
+0

Esta es la mejor respuesta en mi opinión porque responde a su problema principal: 'Por favor, hágame saber cómo almacenar archivos en un archivo usando dumpdata o cualquier otro comando o api. Usar el linux incorporado parece completamente apropiado. – raiderrobert

12

sólo lo utilizan como esa:

./manage.py dumpdata > data_dump.json 

Después de esa acción, no habrá data_dump.json archivo en el directorio en el que ejecutaste ese comando.

Hay muchas opciones con eso, pero probablemente ya lo sepas. Lo que necesita saber es cómo redireccionar la salida estándar a algún archivo: realice esa acción poniendo > antes del nombre del archivo.

Para agregar algo al archivo usaría >>, pero dado que usted está volcando los datos de Django y la salida es probablemente JSON, no querrá eso (porque hará que JSON sea inválido).

+0

puede decirme cómo hacerlo sin utilizar la redirección, recuerde que depende de la plataforma –

+0

@ParitoshSingh Redirigir con> funciona en Unix (y por lo tanto OS X) y en Windows; ¿Hay otras plataformas en las que estarías ejecutando esto? – bouteillebleu

+0

@bouteillebleu, por supuesto, deseo que sea independiente de la plataforma, es decir, ¿por qué estoy usando datos de volcado de django ?, si ese hubiera sido el caso, habría escrito haciendo un archivo de volcado específico para db. Estoy usando ... –

1

Como se menciona en el docs, para volcar grandes conjuntos de datos puede evitar las secciones que causan problemas y tratarlas por separado.

El siguiente comando general no funciona:

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

python manage.py loaddata db.json 

En caso de que más adelante puede exportar los datos excluidos:

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

python manage.py loaddata auth.json 
Cuestiones relacionadas