एक मॉडल के लिए Django डंप डेटा?


144

क्या मैं पूरे ऐप के बजाय सिर्फ एक मॉडल पर Djangodumpdata में प्रदर्शन कर सकता हूं , और यदि हां, तो कैसे?

एक app के लिए यह होगा:

python manage.py dumpdata myapp

हालाँकि, मैं चाहता हूं कि कुछ विशिष्ट मॉडल, जैसे "myapp.mymodel" को डंप किया जाए। इसका कारण, मेरे पास एक ही ऐप में कुछ विशाल, 3 मिलियन रिकॉर्ड प्लस, डेटासेट हैं जिन्हें मैं डंप नहीं करना चाहूंगा।


1
मुझे आपका सवाल समझना आसान नहीं है। आप अपने डेटाबेस में SQL डंप लोड करना चाहते हैं? या आप एक मॉडल के कुछ प्रकार के () और उदाहरण के लिए करना चाहते हैं?
लियोनार्ड एहरेनफ्रेड

जवाबों:


245

संस्करण 1.1 और अधिक से अधिक, Django dumpdataप्रबंधन कमांड आपको व्यक्तिगत तालिकाओं से डेटा डंप करने की अनुमति देता है:

./manage.py dumpdata myapp1 myapp2.my_model

आप कमांड लाइन पर कई ऐप और मॉडल भी अलग कर सकते हैं। यहाँ विहित परिभाषा है:

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

17
गेज, पोस्ट पर नकारात्मक वोट को नहीं समझ पाया जो लगभग 2 साल पुराना है। उपरोक्त कोड v1.1 के साथ भी ठीक काम किया। नई रिलीज़ में नई सुविधाएँ पुराने उत्तरों को अमान्य नहीं बनाती हैं।
साभार

1
और मैं इस डेटा को ऐप के किसी अन्य उदाहरण में कैसे जोड़ूं?
17

1
मानव पठनीय --indent 4dumpdata
जोंस

103

जैसा कि उल्लेख किया गया है, आप इसे 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
यह एक बेहतरीन स्क्रिप्ट है क्योंकि अगर आप चाहें तो और भी अधिक ग्रैन्युलर प्राप्त कर सकते हैं। यदि आप इसके बजाय .filter (...) लाइन तीन के ऊपर करते हैं, तो आप अपने इच्छित विशिष्ट रिकॉर्ड को डंप कर सकते हैं।
ग्रिंगो सुव

1
अच्छा! निश्चित रूप से इस तरह से बेहतर नियंत्रण।
लुइस अर्तोला

9

Django मॉडल से सभी डेटा को json फॉर्मेट में ले जाएं।

वाक्य - विन्यास:

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.