2009-07-11 13 views
99

¿Puedo realizar un dumpdata en Django en un solo modelo, en lugar de toda la aplicación, y si es así, cómo?Django datos de volcado para un solo modelo?

Para una aplicación sería:

python manage.py dumpdata myapp 

Sin embargo, quiero algún modelo específico, como "myapp.mymodel" a ser objeto de dumping. La razón es que tengo unos enormes conjuntos de datos de más de 3 millones de registros en la misma aplicación que no me gustaría descargar.

+0

Me parece que su pregunta no es fácil de entender. ¿Desea cargar un volcado de SQL en su base de datos?¿O desea hacer algún tipo de toString() en una instancia de un modelo? –

Respuesta

179

partir de la versión 1.1 y superior, el comando de administración de Django dumpdata le permite volcar los datos de las tablas individuales:

./manage.py dumpdata myapp1 myapp2.my_model 

También puede hacer por separado múltiples aplicaciones y modelos en la línea de comando. Aquí está la definición canónica:

django-admin dumpdata [app_label[.ModelName] [app_label[.ModelName] ...]] 
+18

django 1.3 ./manage.py dumpdata myapp.mymodel – gath

+14

gath, no entendí el voto negativo en la publicación que tiene casi 2 años. Además, el código anterior funcionó bien incluso con v1.1. Las nuevas funciones en las nuevas versiones no invalidan las respuestas anteriores. – simplyharsh

+0

¿Y cómo agrego estos datos en otra instancia de la aplicación ?. – aguilarpgc

5

Creo que tenía la solución en su pregunta. Se puede volcar un modelo individual como esto:

./manage.py dumpdata myapp.my_model 
+0

lo intenté antes de publicarlo. no tuve suerte estoy en django 1.0. también probé myapp.models.mymodel? – nategood

+0

necesita usar trunk para que esto funcione. – priestc

1

Como solución alternativa se podría hacer otra aplicación y copiar el modelo, sino apuntar a la tabla existente con la opción meta db_table. Entonces podrías simplemente volcar los modelos que copiaste en la nueva aplicación. Tu aplicación existente no se vería afectada.

86

Como se señaló, no puede hacer esto a través de un comando manage.py en Django 1.0. Sin embargo se puede utilizar una secuencia de comandos para exportar el archivo JSON, y cargarlo usando loaddata:

from django.core import serializers 
from myproject.myapp import models 
data = serializers.serialize("json", models.MyModel.objects.all()) 
out = open("mymodel.json", "w") 
out.write(data) 
out.close() 
+4

Este es un excelente script porque puede obtener aún más granular si lo desea. Si en su lugar hace un .filter (...) en la línea tres de arriba, puede volcar solo los registros específicos que desee. –

+1

¡Agradable! Definitivamente más fino control de esta manera. –

0

He creado un sistema de gestión de órdenes La generar un accesorio en una base por modelo. accesorios pueden ser generados mediante la ejecución:

./manage generate_fixtures app.model.MyModel --file=dump/MyModel.json 

código en: https://gist.github.com/2394883

3

Para el éxito que tenía que decir dos veces, y especificar el modelo dos veces, como:

./manage.py dumpdata myapp2.my_model myapp2.my_model 

Si yo sólo dijo

./manage.py dumpdata myapp2 myapp2.my_model 

Me inundé con todos los modelos de myapp2, a pesar de que especifiqué my_model.

2

Tome todos los datos en formato json del modelo django.

Sintaxis:

python manage.py dumpdata app_name.model_name 

Para ejemplo datos de dumping de modelo group_permission que se encuentran en la aplicación de autenticación predeterminado en Django.

python manage.py dumpdata auth.group_permission 

Para la salida a echar un vistazo en consola.

Cuestiones relacionadas