Django volcado de datos para un solo modelo?

144

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

Para una aplicación sería:

python manage.py dumpdata myapp

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

nategood
fuente
1
Creo que su pregunta no es fácil de entender. ¿Desea cargar un volcado de SQL en su base de datos? ¿O quieres hacer algún tipo de toString () y una instancia de un modelo?
Leonard Ehrenfried

Respuestas:

245

A partir de la versión 1.1 y posteriores, el dumpdatacomando de administración de Django le permite volcar datos de tablas individuales:

./manage.py dumpdata myapp1 myapp2.my_model

También puede separar 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] ...]]
simplemente duro
fuente
17
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.
simplemente duro
1
¿Y cómo agrego estos datos en otra instancia de la aplicación?
aguilarpgc
1
Para hacer json legible para humanos, use la bandera --indent 4despuésdumpdata
Valery Ramusik
103

Como se señaló, no puede hacer esto a través de un comando manage.py en Django 1.0. Sin embargo, podría usar un script 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()
dar
fuente
44
Este es un gran script porque puede obtener aún más granular si lo desea. Si, en cambio, realiza un .filter (...) en la línea tres anterior, puede volcar solo los registros específicos que desee.
Gringo Suave
1
¡Agradable! Definitivamente un control más fino de esta manera.
Luis Artola
9

Tome todos los datos en formato json del modelo django.

Sintaxis:

python manage.py dumpdata app_name.model_name

Por ejemplo, volcar datos del modelo group_permission que residen en la aplicación de autenticación predeterminada en django.

python manage.py dumpdata auth.group_permission

Para la salida, eche un vistazo a la consola .

Shubho Shaha
fuente
6

Creo que tenías la solución en tu pregunta. Puede volcar un modelo individual como este:

./manage.py dumpdata myapp.my_model
Harold
fuente
Lo intenté antes de publicar. No tuve suerte. Estoy en Django 1.0. También probé myapp.models.mymodel?
nategood
4

Para tener éxito, tuve que decirlo dos veces y especificar el modelo dos veces, como:

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

Si solo dijera

./manage.py dumpdata myapp2 myapp2.my_model

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

Csaba Toth
fuente
1

Como solución alternativa, puede crear otra aplicación y copiar el modelo, pero apuntarlo a la tabla existente con la opción meta db_table. Luego, podría volcar los modelos que copió en la nueva aplicación. Tu aplicación existente no se vería afectada.

Códigos Ogro
fuente
1

He creado un comando de administración que genera un dispositivo por modelo. Los accesorios se pueden generar ejecutando:

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

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

Jonas Geiregat
fuente
1

Para escribirlo en un archivo específico:

python manage.py dumpdata app_label.ModelName app_label.ModelName2 > fixtures/specic.json
Nikko
fuente