Dati di dump di Django per un singolo modello?


144

È possibile eseguire una dumpdatain Django solo su un unico modello, piuttosto che l'intera applicazione, e se sì, come?

Per un'app sarebbe:

python manage.py dumpdata myapp

Tuttavia, voglio che venga scaricato un modello specifico, come "myapp.mymodel". Il motivo è che ho alcuni enormi, oltre 3 milioni di record, set di dati nella stessa app che non vorrei scaricare.


1
Trovo la tua domanda non facile da capire. Vuoi caricare un dump SQL nel tuo database? Oppure vuoi fare una sorta di toString () su e istanza di un modello?
Leonard Ehrenfried l'

Risposte:


245

A partire dalla versione 1.1 e successive, il dumpdatacomando di gestione Django ti consente di scaricare i dati dalle singole tabelle:

./manage.py dumpdata myapp1 myapp2.my_model

Puoi anche separare più app e modelli dalla riga di comando. Ecco la definizione canonica:

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

17
gath, non ho capito il voto negativo sul post che ha quasi 2 anni. Inoltre il codice sopra ha funzionato bene anche con v1.1. Le nuove funzionalità delle nuove versioni non rendono invalide le risposte precedenti.
simplyharsh,

1
E come posso aggiungere questi dati in un'altra istanza dell'app?
aguilarpgc,

1
Per rendere json leggibile dall'uomo usa la bandiera --indent 4dopodumpdata
Valery Ramusik,

103

Come notato, non puoi farlo attraverso un comando manage.py in Django 1.0. Tuttavia, è possibile utilizzare uno script per esportare il file JSON e caricarlo utilizzando 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
Questo è un ottimo copione perché puoi anche diventare ancora più granulare se lo desideri. Se invece esegui un filtro. (...) alla terza riga sopra, puoi scaricare solo i record specifici che desideri.
Gringo Suave,

1
Bello! Controllo decisamente più preciso in questo modo.
Luis Artola,

9

Prendi tutti i dati in formato json dal modello django.

Sintassi:

python manage.py dumpdata app_name.model_name

Ad esempio, il dumping dei dati dal modello group_permission che risiede nell'app di autenticazione predefinita in django.

python manage.py dumpdata auth.group_permission

Per l'output dai un'occhiata alla console .


6

Penso che tu abbia avuto la soluzione nella tua domanda. È possibile scaricare un singolo modello in questo modo:

./manage.py dumpdata myapp.my_model

l'ho provato prima di pubblicare. non ha avuto fortuna. sono in Django 1.0. hai provato anche myapp.models.mymodel?
nategood,

4

Per il successo ho dovuto dirlo due volte e specificare il modello due volte, come:

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

Se solo avessi detto

./manage.py dumpdata myapp2 myapp2.my_model

Sono stato invaso da tutti i modelli in myapp2, nonostante avessi specificato my_model.


1

Per ovviare al problema, è possibile creare un'altra app e copiare il modello ma puntarlo alla tabella esistente con l'opzione meta db_table. Quindi potresti semplicemente scaricare i modelli che hai copiato nella nuova app. L'app esistente non ne risentirebbe.


1

Ho creato un comando di gestione per generare un dispositivo in base al modello. Le partite possono essere generate eseguendo:

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

codice a: https://gist.github.com/2394883


1

Per scriverlo su un file specifico:

python manage.py dumpdata app_label.ModelName app_label.ModelName2 > fixtures/specic.json
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.