django

2008-10-06 3 views
27

में डेटा माइग्रेट करने का सबसे अच्छा तरीका क्या है मेरे मॉडल में कुछ बदलाव करने के बाद (उदाहरण के लिए मॉडल में एक नया क्षेत्र और एक नया मॉडल) मेरे आबादी वाले डेटाबेस में इन परिवर्तनों को दर्शाने का सबसे अच्छा तरीका क्या है?django


पीएस: मैं रेटेड एक स्थान पर कई समाधान देखना चाहता था। स्पष्ट रूप से अधिक समाधान पहले ही सूचीबद्ध हैं here

उत्तर

16

मैं एक ऐसी ही सवाल here पूछा और काफी कुछ जवाब मिल गया है ("बनाना एक डेटाबेस स्कीमा में परिवर्तन" के लिए नीचे स्क्रॉल)।

काफी मैन्युअल डंपिंग कर रहे हैं और एसक्यूएल के साथ पुन: लोड, जुड़नार का उपयोग कर या "उभरते" Django के लिए स्कीमा-विकास संकुल में से एक का उपयोग कर की तरह यह कर रही है, के तरीकों में से एक बहुत हैं:

(वहाँ Django में स्कीमा-विकास पर एक पैनल जहां इन 3 समाधान चर्चा कर रहे हैं की एक DjangoCon video है)
3

परिवर्तनों के दायरे पर निर्भर करता है। अगर यह एक अल्टर से परे है, तो आप बड़ी सर्जरी कर रहे हैं। मॉडल के साथ-साथ डेटाबेस के बैकअप बनाएं ताकि आप वापस जा सकें।

मेरी प्राथमिकता एक नया आवेदन के रूप में अपना नया (संशोधित, सही, विस्तारित) मॉडल डालना है। इसमें यूआरएल या कुछ भी नहीं होगा, सिर्फ एक मॉडल होगा।

  1. नए मॉडल को नए एप्लिकेशन के रूप में बनाना। यह सुनिश्चित करने के लिए कि यह काम करता है, परीक्षण बनाएं।
  2. सिंकडीबी नए मॉडल के इस अंतरिम कार्यान्वयन को बनाने के लिए।
  3. अपने पुराने मॉडल से पूछने के लिए थोड़ी एक बार उपयोगिता लिखें, और अपना नया मॉडल लोड करें। आप इसे शुद्ध एसक्यूएल में आजमा सकते हैं। मैं लूप बनाने और सहेजने के लिए एक साधारण क्वेरी लिखना पसंद करता हूं।
  4. नए मॉडल को लोड करने के बाद, आप इसे JSON फ़ाइल में डंप कर सकते हैं।

एक बार जब आप अपने पुराने मॉडल से डेटा खींच लेते हैं, तो आप अपने डीबी को पसंदीदा नए प्रारूप में पुनर्निर्माण कर सकते हैं।

  1. नए मॉडल को अपने मौजूदा एप्लिकेशन में ले जाएं।
  2. एप्लिकेशन की तालिका के पुराने संस्करणों को छोड़ दें। नई टेबल बनाने के लिए
  3. सिंकडीबी।
  4. डेटा के साथ JSON फ़ाइल लोड करें।
2

प्रबंधन.py sqlall के साथ देखें कि पैरामीटर नए कॉलम के लिए क्या हैं और मैन्युअल रूप से उन्हें अपने डेटाबेस में आल्टर टेबल स्टेटमेंट के साथ जोड़ें। इस तरह आपको अपने डेटाबेस को दोबारा नहीं करना है; यह कुछ एसक्यूएल ज्ञान यद्यपि आवश्यकता है ...

एक नज़र here लो

23

एक और तकनीक प्रबंधन के लिए डंपडाटा और लोडडाटा तर्कों का उपयोग करना है।py, के बीच में अपने डेटाबेस की हत्या: एक बाहरी उपकरण के साथ

  1. python manage.py dumpdata > dump.json
  2. , किसी भी प्रभावित टेबल छोड़, या पूरी db
  3. python manage.py loaddata dump.json

अधिक के लिए manage.py docs देखें मार डालते हैं।

+0

'अजगर manage.py sqlreset appname' प्रिंट आवश्यक SQL कथन है, लेकिन वास्तव में उन्हें नहीं चलता है। –

+0

आप सही हैं Vebjorn - धन्यवाद, तय। – shacker

+0

अच्छा समाधान। धन्यवाद। हमारे मामले में, Django 14 पर, हमें जुड़नार लोड करने से पहले एक खाली डेटाबेस बनाना होगा। डीबी को सिंकडीबी द्वारा बनाया जा सकता है, हालांकि, डंप लोड करने से पहले स्वचालित रूप से निर्मित सामग्री प्रकार मैन्युअल रूप से हटा दिए जाने चाहिए। –

0

Perform these steps in order may help you:

For more details,

यहां क्लिक करें: http://south.readthedocs.org/en/latest/

1) python manage.py schemamigration apps.appname --initial

कदम से ऊपर डिफ़ॉल्ट के रूप में प्रवास फ़ोल्डर बनाता है।

2) python manage.py migrate apps.appname --fake

एक नकली प्रवास उत्पन्न करता है।

3) python manage.py schemamigration apps.appname --auto

तो फिर तुम क्षेत्रों के रूप में आप चाहते हैं जोड़ सकते हैं और उपरोक्त आदेश कर सकते हैं।

4) python manage.py migrate apps.appname

तो डेटाबेस के लिए फ़ाइलों को चले जाते हैं।