লক্ষ্য ডাটাবেস আপ টু ডেট নয়


100

আমি ফ্লাস্ক অ্যাপ্লিকেশনটির জন্য স্থানান্তর করতে চাই। আমি আলেম্বিক ব্যবহার করছি।

তবে আমি নিম্নলিখিত ত্রুটিটি পেয়েছি।

Target database is not up to date.

অনলাইন, আমি পড়লাম যে এটির সাথে এর কিছু করার আছে। http://alembic.zzzcomputing.com/en/latest/cookbook.html#building-an-up-to-date-database-from-scratch

দুর্ভাগ্যক্রমে, আমি কীভাবে ডাটাবেসটি আপ টু ডেট পেতে পারি এবং লিংকে প্রদত্ত কোডটি কোথায় / কীভাবে লিখতে হবে তা আমি পুরোপুরি বুঝতে পারি না। আপনার যদি মাইগ্রেশন সম্পর্কিত অভিজ্ঞতা থাকে তবে আপনি দয়া করে আমার জন্য এটি ব্যাখ্যা করতে পারেন

ধন্যবাদ

উত্তর:


102

মাইগ্রেশন তৈরির পরে, ম্যানুয়ালি বা হিসাবে হিসাবে --autogenerate, আপনাকে অবশ্যই এটি প্রয়োগ করতে হবে alembic upgrade head। আপনি যদি db.create_all()শেল থেকে ব্যবহার করেন তবে alembic stamp headআপনি এটি নির্দেশ করতে ব্যবহার করতে পারেন যে ডাটাবেসের বর্তমান অবস্থা সমস্ত স্থানান্তরের প্রয়োগকে উপস্থাপন করে।



38

আমার বক্তব্য এই প্রশ্নের মতো, যখন আমি "./manage.py db মাইগ্রেট -m 'সম্পর্ক যুক্ত করুন" "চালিত করি, ত্রুটিটি এই" 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)

এবং এখন আমি আবার মাইগ্রেশন করতে পারি।


একটি যাদুমন্ত্র মত কাজ করে ! আমি মনে করি এটি এই সমস্যাটি পরিচালনা করার সেরা উপায়!
এ্যাটাব্যোভীপ্রো

একই অবস্থা! মসৃণ কাজ করেছেন। আমি জানতাম যে এটি ডিবি হেড এবং স্রোতের সাথে করেছে, কিন্তু আমি জানি না যে "স্ট্যাম্প" কমান্ড রয়েছে। ধন্যবাদ!
সাবস্পেসিয়ান

9

এটি বিভিন্ন উপায়ে সমাধান করা যেতে পারে:

1 এই ত্রুটিটি সমাধান করতে, সর্বশেষতম মাইগ্রেশন ফাইল (একটি অজগর ফাইল) মুছুন এবং তারপরে নতুনভাবে একটি স্থানান্তর করার চেষ্টা করুন to

যদি সমস্যাটি এখনও অব্যাহত থাকে তবে এই আদেশগুলি ব্যবহার করে দেখুন:

$ 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.

8

আমাকে কিছু কারণে আমার কিছু স্থানান্তর ফাইল মুছতে হয়েছিল। নিশ্চিত কেন। তবে সমস্যাটি ঠিক হয়ে গেছে, একধরণের।

একটি সমস্যা হ'ল ডাটাবেসগুলি সমস্ত নতুন সারণী ইত্যাদির সাথে সঠিকভাবে আপডেট হওয়া শেষ করে, তবে আমি যখন স্বয়ংক্রিয়াগুলি ব্যবহার করি তখন মাইগ্রেশন ফাইলগুলি কোনও পরিবর্তন দেখায় না।

কারও যদি এর থেকে আরও ভাল সমাধান থাকে তবে দয়া করে আমাকে জানান, ঠিক এখনই আমার সমাধানটি হ্যাকির মতো।


আমি জানি এটি এখন কিছুটা পুরানো, তবে আপনার টেবিলগুলি কি বেস থেকে উত্তরাধিকারী? আমার একই সমস্যা ছিল এবং অটমাইগ্রেট পরিবর্তনগুলি বাছাই করছে না এই কারণে যে আমার নতুন টেবিলগুলি বেস যেখানে রয়েছে বেস থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয়নি Base = declarative_base() এবং এটিও মনে রাখতে হবেfrom sqlalchemy.ext.declarative import declarative_base

7
$ 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.

আপনি ডকুমেন্টেশন https://flask-migrate.readthedocs.io/en/latest/ এ আরও তথ্য পেতে পারেন


2

আমি খুব আলাদা মাথাতে দৌড়েছি এবং আমি ক্ষেত্রগুলির একটিকে স্ট্রিং থেকে পূর্ণসংখ্যায় পরিবর্তন করতে চেয়েছিলাম, তাই প্রথমে রান করুন:

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

এটি এখন সমাধান!


1

যদি আপনি, আমার মতো, সদ্য একটি নতুন প্রকল্প শুরু করে থাকেন এবং আপনি ইন-মেমরি এসকিউএলাইট ডাটাবেস ( sqlite:///:memory:) ব্যবহার করেন তবে এটিও ঘটতে পারে । আপনি যদি এই জাতীয় ডেটাবেজে মাইগ্রেশন প্রয়োগ করেন তবে পরের বার আপনি যখন পুনর্বিবেচনাটি স্বয়ংক্রিয়ভাবে জেনারেট করতে চান, ডাটাবেসটি এখনও তার মূল অবস্থায় থাকবে (খালি), সুতরাং আলেমেবিক অভিযোগ করবে যে লক্ষ্যবস্তু ডাটাবেস অবধি নেই তারিখ সমাধানটি হ'ল স্থায়ী ডাটাবেসে স্যুইচ করা।


0

এই ত্রুটিটি ঠিক করতে, সর্বশেষতম মাইগ্রেশন ফাইল (একটি অজগর ফাইল) মুছুন এবং তারপরে নতুনভাবে একটি স্থানান্তর করার চেষ্টা করুন perform



-6

এটি সমাধান করার জন্য, আমি স্থানান্তরিত টেবিলগুলি (মুছে ফেলতে) ড্রপ করি এবং এই আদেশগুলি চালিত করি

flask db migrate

এবং

flask db upgrade
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.