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.


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] ...]]

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

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 .


6

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

./manage.py dumpdata myapp.my_model

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.


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.



1

Untuk menulisnya di file tertentu:

python manage.py dumpdata app_label.ModelName app_label.ModelName2 > fixtures/specic.json
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.