2011-03-16 4 views
20

मैं अपने डीबी में एक टेबल साफ़ करना चाहता था, इसलिए मैंने टेबल गिरा दिया। आम तौर पर मैं इसे फिर से बनाने के लिए manage.py syncdb करता हूं। हालांकि, उत्तर here कहता है कि syncdb का उपयोग न करें। तो, मैं इसके बजाय क्या करूँ?django-south के साथ गिराए गए तालिका को पुनर्स्थापित कैसे करें?

उत्तर

2

हम्म this exchange मेरी बहुत सवाल को शामिल किया गया:

आप हाथ से डेटाबेस को संशोधित करते हैं, तो दक्षिण नोटिस नहीं होगा - कौन-सा संस्करण डेटाबेस है south_migrationhistory तालिका है का ट्रैक रखने की अपनी एक ही तरीका है, इसलिए यदि आप इसके पीछे पीछे फिसलते हैं, तो यह इसे ठीक करने की आपकी ज़िम्मेदारी है।

क्या मैं मॉडल है कि मैं प्रश्न में गिरा दिया, एक schemamigration कर बाहर टिपण्णी कर रहा था कर समाप्त हो गया, एक मैं गिरा दिया (ताकि दक्षिण ड्रॉप करने के लिए कुछ नहीं है), migrate आईएनजी के एक खाली नहीं-स्तंभ तालिका बनाने, फिर मॉडल को अन-टिप्पणी, schemamigration और migrate आईएनजी फिर से टिप्पणी करें। बस तालिका छोड़ने और syncdb लेकिन आह ठीक से थोड़ा अधिक परेशान।

+0

क्या mysql में नो-कॉलम तालिका बनाना संभव है? –

27

समान समस्या थी। बाहर INSTALLED_APPS से INSTALLED_APPS में

  • रन का प्रबंधन

    1. टिप्पणी "दक्षिण"
    2. रन manage.py syncdb
    3. टिप्पणी हटाएं "दक्षिण": सुनिश्चित नहीं हैं कि यह सब परिस्थितियों में काम करता है, लेकिन यहाँ मैं क्या किया है। पीई माइग्रेट

    वोला!

    आपका लाभ भिन्न हो सकते हैं ....

  • +0

    इसे करने के दौरान आपको माइग्रेशन फ़ोल्डर का नाम बदलने की आवश्यकता होगी, मैं बस अंडरस्कोर के साथ उपसर्ग करता हूं। इसे ऊपर चरण 1 और 2 के बीच करें, फिर 'माइग्रेट ऐपनाम शून्य' के लिए चरण 4 –

    39

    यह एक सुंदर देर से प्रतिक्रिया है, लेकिन जो लोग एक ही मुद्दे में चलेगा (जैसे मैंने किया था) के लिए।

    आम तौर पर है कि दक्षिण द्वारा किया जाता है अनुप्रयोग के लिए db_tables ड्रॉप करने का उपयोग करना चाहिए:

    python manage.py migrate appname zero 
    

    लेकिन अगर आप उन्हें DB में मैन्युअल रूप से गिरा दक्षिण बताएं बारे में यह

    python manage.py migrate appname zero --fake 
    

    और निश्चित रूप से टेबल

    python manage.py migrate appname 
    
    +4

    +1 से पहले' माइग्रेशन 'पर वापस नाम बदलें! –

    +11

    यह केवल तभी काम करता है जब आपने _every_ तालिका –

    +0

    +1 को छोड़ दिया है, तो मुझे मेरे dev सर्वर पर मदद मिली। धन्यवाद! – tatlar

    1

    सुनिश्चित करें कि आपके सभी माइग्रेशन लागू हैं: python manage.py migrate

    बताएँ Django तालिकाएं बनाने के लिए के रूप में वे अपने मॉडल में हैं: python manage.py syncdb

    बताएँ दक्षिण है कि सब कुछ है, जहां यह होना चाहिए: python manage.py migrate appname --fake

    मतलब यह है कि कुछ भी नहीं की किसी में बदल गया है अपने मॉडल चूंकि आपने अपना अंतिम माइग्रेशन बनाया है।

    0

    मुझे पता है कि यह समस्या पुरानी है, लेकिन मैं बस इस मुद्दे में भाग गया और सोचा कि अगर मैं किसी की मदद करता हूं तो मैं अपना समाधान पोस्ट करूंगा।

    1. अपने models.py फ़ोल्डर में डेटाबेस जहां जाएं।
    2. models.py फ़ाइल से पूरी कक्षा को काट दें।
    3. रन ./manage.py schemamigration appname --auto (यह एक और माइग्रेशन बनाएगा जहां South इस तालिका को हटाने के लिए पहचाना जाएगा)। आपको अपने डेटाबेस में रिक्त तालिका को फिर से बनाने की आवश्यकता हो सकती है, इसलिए South इसे देखता है।
    4. migration चलाएं और तालिका को आपके डेटाबेस से छोड़ना चाहिए।
    5. अपनी टेबल क्लास में फिर से पेस्ट करें जहां यह आपके models.py फ़ाइल में था।
    6. एक ./manage.py schemamigration चलाएं appname --auto। दक्षिण को टेबल लेना चाहिए और
    7. चलाएं ./manage.py माइग्रेट appname और दक्षिण को तालिका को वापस अपने डेटाबेस में दोबारा जोड़ना चाहिए ... कॉलम और फिर से, लेकिन डेटा के बिना, स्पष्ट रूप से । :)
    +0

    हां अच्छा, यह वही है जो मेरा जवाब कहता है लेकिन एक चरण-दर-चरण लेआउट में। – Claudiu

    +0

    ओह अच्छा! क्षमा करें, मैंने आपको जवाब नहीं देखा। खुशी है कि हम दोनों कम से कम एक ही संकल्प में आए थे। :) – jaredgilmore

    संबंधित मुद्दे