Django में प्रबंधको के साथ CLI से डेटाबेस को साफ़ करने का सबसे आसान तरीका क्या है?


83

मैं MySQL के साथ एक वेबसाइट बनाने के लिए Django का उपयोग कर रहा हूं। अब जैसा कि मैं सीख रहा हूं इसलिए मुझे बहुत बार मॉडल को बदलने की आवश्यकता है इसलिए मैं चाहता हूं कि सभी तालिकाओं को मंजूरी मिल जाए और नई तालिका बनाई जाए।

लेकिन syncdbमौजूदा तालिकाओं को नहीं छूता है। क्या इस समस्या को संभालने का कोई बेहतर तरीका है?

जवाबों:


152

यदि आपको डेटा की परवाह नहीं है:

सबसे अच्छा तरीका डेटाबेस को गिराना और syncdbफिर से चलाना होगा । या आप चला सकते हैं:

Django के लिए = = 1.5

python manage.py flush

Django के लिए <1.5

python manage.py reset appname

(आप --no-inputइंटरएक्टिव प्रॉम्प्ट को छोड़ने के लिए इसके लिए कमांड के अंत में जोड़ सकते हैं ।)

यदि आप डेटा की परवाह करते हैं:

डॉक्स से:

syncdb केवल उन मॉडलों के लिए तालिकाओं का निर्माण करेगा जिन्हें अभी तक स्थापित नहीं किया गया है। यह स्थापना के बाद एक मॉडल वर्ग में किए गए परिवर्तनों से मेल खाने के लिए कभी-कभी बयान जारी नहीं करेगा। मॉडल कक्षाओं और डेटाबेस स्कीमा में परिवर्तन अक्सर अस्पष्टता के कुछ रूप को शामिल करते हैं और उन मामलों में, Django को बनाने के लिए सही परिवर्तनों का अनुमान लगाना होगा। एक जोखिम है कि महत्वपूर्ण डेटा प्रक्रिया में खो जाएगा।

यदि आपने किसी मॉडल में परिवर्तन किया है और डेटाबेस की तालिकाओं को मिलान करने के लिए बदलना चाहते हैं, तो नई SQL संरचना को प्रदर्शित करने के लिए sql कमांड का उपयोग करें और परिवर्तनों को काम करने के लिए अपने मौजूदा टेबल स्कीमा से तुलना करें।

https://docs.djangoproject.com/en/dev/ref/django-admin/

संदर्भ: FAQ - https://docs.djangoproject.com/en/dev/faq/models/#if-i-make-changes-to-a-model-how-do-i-update-the-database

लोग दक्षिण ( http://south.aeracode.org/docs/about.html#key-features ) की भी सलाह देते हैं , लेकिन मैंने इसकी कोशिश नहीं की है।


4
दक्षिण वास्तव में, पलायन को स्वचालित रूप से संभालने के लिए वास्तव में अच्छा है। उपयोग करने के लिए थोड़ा सा लेता है, लेकिन यह विकास के दौरान डेटाबेस को छोड़ने और पुनः प्राप्त करने में बहुत परेशानी पैदा करता है, और आपकी साइट के लाइव होने के बाद आपके पास होना चाहिए और जब आप इसमें कीमती डेटा रखते हैं तो आपको db संरचना को बदलना होगा।
thepeer

11
परिणाम की पुष्टि की । Django 1.5 में कमांड को अपडेट किया गया है flush। इंटरैक्टिव प्रॉम्प्ट का उपयोग करने python manage.py flushया python manage.py flush --noinputछोड़ने का प्रयास करें ।
अग्रोन्ती

दक्षिण में पदावनत कर दिया गया हैयहाँ देखें । और आपके द्वारा यहां दिया गया लिंक टूट गया है।
मुकेश साई कुमार

ऐसा लगता है कि कमांड अब डॉक्स केdjango-admin flush अनुसार है
टॉड

4

Django एक्सटेंशन का उपयोग , चल रहा है:

./manage.py reset_db

डेटाबेस तालिकाओं को साफ़ करेगा, फिर चल रहा है:

./manage.py syncdb

उन्हें फिर से बनाएंगे (दक्षिण आप चीजों को स्थानांतरित करने के लिए कह सकते हैं)।


2
@becko इस पर अमल करते हैं: पाइप स्थापित करें django- एक्सटेंशन
फेसप्लेम

4

मुझे लगता है कि Django डॉक्स ने स्पष्ट रूप से उल्लेख किया है कि अगर इरादा फिर से एक खाली DB से शुरू करना है (जो ओपी का इरादा लगता है), तो बस डेटाबेस को फिर से बनाएं और फिर से बनाएं migrate(उपयोग करने के बजाय flush):

यदि आप एक खाली डेटाबेस से शुरू करते हैं और सभी माइग्रेशन को फिर से चलाते हैं, तो आपको डेटाबेस को छोड़ देना चाहिए और फिर से बनाना होगा और उसके बजाय माइग्रेट चलाना होगा।

ओपी के मामले के लिए, हमें सिर्फ निम्नलिखित की आवश्यकता है:

  1. डेटाबेस MySQL से ड्रॉप करें
  2. डेटाबेस को फिर से बनाएँ
  3. Daud python manage.py migrate

0

सबसे तेज़ (डेटा सहित सभी तालिकाएँ बनाता है):

./manage.py reset appname | ./manage.py dbshell

सावधान:

  • विंडोज पर सही ढंग से काम नहीं कर सकते।
  • Db में कुछ पुराने टेबल रख सकते हैं

3
resetपहले से ही SQL चलाता है, इसलिए करने के लिए पाइप की जरूरत नहीं है dbshell। यदि आप sqlresetकमांड का उपयोग करते हैं , तो यह सिर्फ एसक्यूएल को प्रिंट करेगा, जिसे आप निष्पादन के लिए शेल में पाइप कर सकते हैं, लेकिन यह एक अनावश्यक कदम है।
माइकल मिओर

0

आप टेबल संरचना को नष्ट किए बिना किसी तालिका के सभी डेटा को हटाने के लिए Django-Truncate लाइब्रेरी का उपयोग कर सकते हैं।

उदाहरण:

  1. सबसे पहले, अपने टर्मिनल / कमांड लाइन का उपयोग करके django-turncate स्थापित करें:
pip install django-truncate
  1. settings.pyफ़ाइल में अपने INSTALLED_APPS में "django_truncate" जोड़ें :
INSTALLED_APPS = [
    ...
    'django_truncate',
]
  1. एप्लिकेशन से तालिका के सभी डेटा को हटाने के लिए अपने टर्मिनल में इस कमांड का उपयोग करें।
python manage.py truncate --apps app_name --models table_name
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.