लक्ष्य डेटाबेस अद्यतित नहीं है


104

मैं एक फ्लास्क ऐप के लिए एक माइग्रेशन बनाना चाहता हूं। मैं अलेम्बिक का उपयोग कर रहा हूं।

हालाँकि, मुझे निम्न त्रुटि मिलती है।

Target database is not up to date.

ऑनलाइन, मैंने पढ़ा है कि इसके साथ कुछ करना है। http://alembic.zzzcomputing.com/en/latest/cookbook.html#building-an-up-to-date-database-from-scratch

दुर्भाग्य से, मुझे यह समझ में नहीं आया है कि डेटाबेस को कैसे प्राप्त किया जाए और मुझे लिंक में दिए गए कोड को कैसे / कैसे लिखना चाहिए। यदि आपके पास प्रवासियों के साथ अनुभव है, तो क्या आप मेरे लिए इसे समझा सकते हैं

धन्यवाद

जवाबों:


109

माइग्रेशन बनाने के बाद, या तो मैन्युअल रूप से या इसके साथ --autogenerate, आपको इसे लागू करना होगा alembic upgrade head। यदि आप db.create_all()शेल से उपयोग करते हैं, तो आप यह alembic stamp headइंगित करने के लिए उपयोग कर सकते हैं कि डेटाबेस की वर्तमान स्थिति सभी माइग्रेशन के अनुप्रयोग का प्रतिनिधित्व करती है।



39

मेरा रुख इस सवाल की तरह है, जब मैं "//manage.py db migrate -m 'Add रिश्ता'" निष्पादित करता हूं, तो त्रुटि इस तरह से "alembic.util.exc.CommandError: लक्ष्य डेटाबेस अप टू डेट है।"

इसलिए मैंने अपने प्रवास की स्थिति की जाँच की:

(venv) ]#./manage.py db heads
d996b44eca57 (head)
(venv) ]#./manage.py db current
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
715f79abbd75

और पाया कि सिर और वर्तमान अलग हैं!

मैंने यह कदम उठाकर इसे ठीक किया:

(venv)]#./manage.py db stamp heads
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running stamp_revision 715f79abbd75 -> d996b44eca57

और अब करंट सिर पर ही है

(venv) ]#./manage.py db current
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
d996b44eca57 (head)

और अब मैं फिर से पलायन कर सकता हूं।


एक जादू की तरह काम करता है ! मुझे लगता है कि यह इस मुद्दे को प्रबंधित करने का सबसे अच्छा तरीका है!
अटाबोयबीप्रो

मुझे भी! सुचारू रूप से काम किया। मुझे पता था कि यह db हेड्स और करंट के साथ था, लेकिन यह नहीं जानता था कि "स्टैम्प" कमांड है। धन्यवाद!
उपप्राचीन

13

यह कई तरीकों से हल किया जा सकता है:

1 इस त्रुटि को ठीक करने के लिए, नवीनतम माइग्रेशन फ़ाइल (एक अजगर फ़ाइल) को हटाएं, फिर माइग्रेशन को नए सिरे से करने का प्रयास करें।

यदि समस्या अभी भी बनी रहती है, तो इन आदेशों को आज़माएं:

$ flask db stamp head  # To set the revision in the database to the head, without performing any migrations. You can change head to the required change you want.
$ flask db migrate     # To detect automatically all the changes.
$ flask db upgrade     # To apply all the changes.

9

मुझे अपनी माइग्रेशन फ़ाइलों को किसी कारण से हटाना पड़ा। यकीन नहीं है कि क्यों। लेकिन उस समस्या को ठीक कर दिया, तरह की।

एक मुद्दा यह है कि डेटाबेस सभी नए तालिकाओं आदि के साथ ठीक से अपडेट हो रहा है, लेकिन माइग्रेशन फाइलें स्वयं को तब नहीं दिखाती हैं जब मैं ऑटोमेट्रेट का उपयोग करता हूं।

यदि किसी के पास एक बेहतर समाधान है, तो कृपया मुझे बताएं, क्योंकि अभी मेरा समाधान एक तरह का हैकी है।


मुझे पता है कि यह अब थोड़ा पुराना है, लेकिन क्या आपके टेबल बेस से विरासत में मिले हैं? मेरे पास एक ही मुद्दा था और इस तथ्य के कारण परिवर्तन नहीं हो रहा था कि मेरी नई तालिका आधार से विरासत में नहीं मिली थी, जहां आधार है Base = declarative_base() और यह भी याद रखेंfrom sqlalchemy.ext.declarative import declarative_base


2

मैं भी अलग-अलग शीर्षों में चला गया था और मैं स्ट्रिंग से पूर्णांक तक फ़ील्ड में से एक को बदलना चाहता था, इसलिए पहला रन:

$ flask db stamp head # to make the current the same
$ flask db migrate
$ flask db upgrade

यह अब हल हो गया है!


1

यह तब भी हो सकता है जब आप, जैसे खुद ने एक नई परियोजना शुरू की हो और आप इन-मेमोरी SQLite डेटाबेस ( sqlite:///:memory:) का उपयोग कर रहे हों । यदि आप इस तरह के डेटाबेस पर माइग्रेशन लागू करते हैं, तो जाहिर है कि अगली बार जब आप ऑटो रिवीजन कहना चाहते हैं, तब भी डेटाबेस अपनी मूल स्थिति (खाली) रहेगा, इसलिए एलेम्बिक में शिकायत होगी कि लक्ष्य डेटाबेस में नहीं है। दिनांक। समाधान एक स्थायी डेटाबेस पर स्विच करना है।


0

इस त्रुटि को ठीक करने के लिए, नवीनतम माइग्रेशन फ़ाइल (एक अजगर फ़ाइल) को हटा दें, फिर माइग्रेशन को नए सिरे से करने का प्रयास करें।



-6

इसे हल करने के लिए, मैं माइग्रेशन में तालिकाओं को हटाता हूं (हटाता हूं) और इन कमांडों को चलाता हूं

flask db migrate

तथा

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