ข้อมูลการถ่ายโอน Django สำหรับรูปแบบเดียวหรือไม่


144

ฉันสามารถแสดงdumpdataในDjangoด้วยแบบจำลองเดียวมากกว่าแอปทั้งหมดและถ้าเป็นเช่นนั้นได้อย่างไร

สำหรับแอปมันจะเป็น:

python manage.py dumpdata myapp

อย่างไรก็ตามฉันต้องการทิ้งโมเดลบางอย่างเช่น "myapp.mymodel" เหตุผลก็คือฉันมีชุดบันทึกจำนวนมากถึง 3 ล้านชุดในแอพเดียวกันกับที่ฉันไม่ต้องการทิ้ง


1
ฉันพบว่าคำถามของคุณไม่เข้าใจง่าย คุณต้องการโหลดการถ่ายโอนข้อมูล SQL ลงในฐานข้อมูลของคุณหรือไม่ หรือคุณต้องการเปิด toString () บางอย่างและอินสแตนซ์ของแบบจำลอง
Leonard Ehrenfried

คำตอบ:


245

ตั้งแต่เวอร์ชัน 1.1 ขึ้นไปdumpdataคำสั่งการจัดการDjango อนุญาตให้คุณดัมพ์ข้อมูลจากแต่ละตาราง:

./manage.py dumpdata myapp1 myapp2.my_model

คุณยังสามารถแยกหลายแอพและรุ่นต่าง ๆ ในบรรทัดคำสั่ง นี่คือคำจำกัดความที่ยอมรับได้:

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

17
แก็ทไม่เข้าใจการลงคะแนนเชิงลบในโพสต์ซึ่งเกือบ 2 ปีแล้ว ยิ่งไปกว่านั้นโค้ดข้างต้นยังใช้งานได้ดีแม้กับ v1.1 คุณสมบัติใหม่ในรุ่นใหม่ไม่ได้ทำให้คำตอบเก่าไม่ถูกต้อง
Simplyharsh

1
และฉันจะเพิ่มข้อมูลนี้ในแอพอื่นของแอพได้อย่างไร
aguilarpgc

1
เพื่อให้ json ใช้ธงของมนุษย์ที่อ่านได้--indent 4หลังจากนั้นdumpdata
Valery Ramusik

103

ตามที่ระบุไว้คุณไม่สามารถทำได้ผ่านคำสั่ง Manage.py ใน Django 1.0 อย่างไรก็ตามคุณสามารถใช้สคริปต์เพื่อส่งออกไฟล์ JSON และโหลดโดยใช้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
นี่เป็นสคริปต์ที่ยอดเยี่ยมเพราะคุณจะได้รายละเอียดมากขึ้นถ้าคุณต้องการ หากคุณทำ. ฟิลเตอร์ (... ) ในบรรทัดที่สามด้านบนคุณสามารถดัมพ์เฉพาะระเบียนที่คุณต้องการ
Gringo Suave

1
ดี! ควบคุมวิธีนี้ได้ดีขึ้นอย่างแน่นอน
Luis Artola

9

นำข้อมูลทั้งหมดเป็นรูปแบบ json จากรุ่น django

ไวยากรณ์:

python manage.py dumpdata app_name.model_name

สำหรับตัวอย่างการทุ่มตลาดข้อมูลจากรุ่น group_permission ซึ่งอาศัยอยู่ในแอปเริ่มต้นการตรวจสอบสิทธิ์ใน Django

python manage.py dumpdata auth.group_permission

สำหรับการส่งออกจะดูบนคอนโซล


6

ฉันคิดว่าคุณมีทางออกในคำถามของคุณ คุณสามารถทิ้งโมเดลแต่ละรุ่นดังนี้:

./manage.py dumpdata myapp.my_model

ฉันลองก่อนโพสต์ ไม่มีโชค ฉันอยู่ใน django 1.0 ได้ลอง myapp.models.mymodel แล้วหรือยัง
nategood

4

เพื่อความสำเร็จฉันต้องพูดสองครั้งและระบุรุ่นสองครั้งเช่น:

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

ถ้าฉันแค่พูด

./manage.py dumpdata myapp2 myapp2.my_model

ฉันถูกน้ำท่วมทุกรุ่นใน myapp2 แม้ว่าฉันจะระบุ my_model


1

คุณสามารถสร้างแอปอื่นและคัดลอกโมเดล แต่ชี้ไปที่ตารางที่มีอยู่ด้วยตัวเลือกเมตาดาต้า db_table จากนั้นคุณสามารถทิ้งโมเดลที่คุณคัดลอกไปไว้ในแอพใหม่ แอพที่คุณมีอยู่จะไม่ได้รับผลกระทบ


1

ฉันได้สร้างคำสั่งการจัดการสร้างการติดตั้งบนพื้นฐานต่อรุ่น การแข่งขันสามารถสร้างได้โดยการวิ่ง:

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

รหัสได้ที่: https://gist.github.com/2394883


1

ในการเขียนลงไฟล์ที่ต้องการ:

python manage.py dumpdata app_label.ModelName app_label.ModelName2 > fixtures/specic.json
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.