Django membuang data untuk model tunggal?

144

Bisakah saya tampil dumpdatadi Django hanya pada satu model, daripada seluruh aplikasi, dan jika demikian, bagaimana?

Untuk suatu aplikasi adalah:

python manage.py dumpdata myapp

Namun, saya ingin beberapa model tertentu, seperti "myapp.mymodel" dibuang. Alasannya, saya punya beberapa set data besar, 3 juta plus, dalam aplikasi yang sama yang tidak ingin saya buang.

baik
sumber
1
Saya menemukan pertanyaan Anda tidak mudah dimengerti. Anda ingin memuat dump SQL ke dalam database Anda? Atau Anda ingin melakukan semacam toString () pada dan contoh model?
Leonard Ehrenfried

Jawaban:

245

Pada versi 1.1 dan lebih tinggi, dumpdataperintah manajemen Django memungkinkan Anda untuk membuang data dari masing-masing tabel:

./manage.py dumpdata myapp1 myapp2.my_model

Anda juga dapat memisahkan beberapa aplikasi dan model pada baris perintah. Inilah definisi kanonik:

django-admin dumpdata [app_label[.ModelName] [app_label[.ModelName] ...]]
cukup keras
sumber
17
gath, tidak mengerti suara negatif pada posting yang hampir 2 tahun. Apalagi kode di atas bekerja dengan baik bahkan dengan v1.1. Fitur baru dalam rilis baru tidak membuat jawaban yang lebih lama tidak valid.
simplyharsh
1
Dan bagaimana cara menambahkan data ini di instance aplikasi lain?
aguilarpgc
1
Untuk membuat json yang dapat dibaca manusia gunakan bendera --indent 4setelahdumpdata
Valery Ramusik
103

Seperti disebutkan, Anda tidak bisa melakukan ini melalui perintah manage.py di Django 1.0. Namun Anda dapat menggunakan skrip untuk mengekspor file JSON, dan memuatnya menggunakan 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()
sayang
sumber
4
Ini adalah skrip yang hebat karena Anda bisa mendapatkan lebih banyak rincian jika Anda mau. Jika Anda melakukan .filter (...) pada baris tiga di atas, Anda dapat membuang hanya catatan spesifik yang Anda inginkan.
Gringo Suave
1
Bagus! Jelas kontrol yang lebih baik dengan cara ini.
Luis Artola
9

Ambil semua data ke dalam format json dari model Django.

Sintaksis:

python manage.py dumpdata app_name.model_name

Sebagai contoh membuang data dari Model group_permission yang berada di aplikasi default auth di Django.

python manage.py dumpdata auth.group_permission

Untuk output, lihatlah di konsol .

Shubho Shaha
sumber
6

Saya pikir Anda punya solusi dalam pertanyaan Anda. Anda dapat membuang model individual seperti ini:

./manage.py dumpdata myapp.my_model
Harold
sumber
saya mencobanya sebelum memposting. tidak beruntung. Saya di Django 1.0. juga mencoba myapp.models.mymodel?
nategood
4

Untuk sukses saya harus mengatakannya dua kali, dan menentukan modelnya dua kali, seperti:

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

Kalau saja saya bilang

./manage.py dumpdata myapp2 myapp2.my_model

Saya dibanjiri dengan semua model di myapp2, terlepas dari kenyataan bahwa saya menentukan my_model.

Csaba Toth
sumber
1

Sebagai solusi Anda bisa membuat aplikasi lain dan menyalin model tetapi arahkan ke tabel yang ada dengan opsi meta db_table. Maka Anda bisa membuang model yang Anda salin ke aplikasi baru. Anda aplikasi yang ada tidak akan terpengaruh.

Kode Ogre
sumber
1

Saya telah membuat perintah manajemen, menghasilkan fixture pada basis per model. Jadwal dapat dibuat dengan menjalankan:

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

kode di: https://gist.github.com/2394883

Jonas Geiregat
sumber
1

Untuk menulisnya di file tertentu:

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