ฐานข้อมูลเป้าหมายไม่ทันสมัย


100

ฉันต้องการย้ายข้อมูลสำหรับแอป Flask ฉันใช้ Alembic

อย่างไรก็ตามฉันได้รับข้อผิดพลาดต่อไปนี้

Target database is not up to date.

ออนไลน์ฉันอ่านว่ามันเกี่ยวข้องกับสิ่งนี้ http://alembic.zzzcomputing.com/en/latest/cookbook.html#building-an-up-to-date-database-from-scratch

น่าเสียดายที่ฉันไม่ค่อยเข้าใจวิธีการทำให้ฐานข้อมูลเป็นปัจจุบันและฉันควรเขียนโค้ดที่ระบุในลิงค์อย่างไร หากคุณมีประสบการณ์เกี่ยวกับการย้ายข้อมูลโปรดอธิบายเรื่องนี้ให้ฉันฟังได้ไหม

ขอบคุณ

คำตอบ:


103

หลังจากที่สร้างการย้ายข้อมูลด้วยตนเองหรือเป็นคุณต้องใช้มันด้วย--autogenerate alembic upgrade headหากคุณใช้db.create_all()จากเชลล์คุณสามารถใช้alembic stamp headเพื่อระบุว่าสถานะปัจจุบันของฐานข้อมูลแสดงถึงแอปพลิเคชันของการโอนย้ายทั้งหมด



38

สถานะของฉันเป็นเหมือนคำถามนี้เมื่อฉันดำเนินการ "./manage.py db migrate -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)

และตอนนี้ฉันสามารถย้ายข้อมูลได้อีกครั้ง


ใช้งานได้เหมือนมีเสน่ห์! ฉันรู้สึกว่านี่เป็นวิธีที่ดีที่สุดในการจัดการปัญหานี้!
attaboyabhipro

ที่นี่! ทำงานได้อย่างราบรื่น ฉันรู้ว่ามันเกี่ยวข้องกับหัว db และกระแส แต่ไม่รู้ว่ามีคำสั่ง "ประทับ" ขอบคุณ!
Subspacian

10

สิ่งนี้สามารถแก้ไขได้หลายวิธี:

1 ในการแก้ไขข้อผิดพลาดนี้ให้ลบไฟล์การย้ายข้อมูลล่าสุด (ไฟล์ python) จากนั้นลองทำการย้ายข้อมูลอีกครั้ง

หากปัญหายังคงมีอยู่ให้ลองใช้คำสั่งเหล่านี้:

$ 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 หรือไม่? ฉันมีปัญหาเดียวกันและการกำหนดค่าอัตโนมัติไม่ได้รับการเปลี่ยนแปลงเนื่องจากตารางใหม่ของฉันไม่ได้รับช่วงจากฐานที่ฐานอยู่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 ในหน่วยความจำ ( sqlite:///:memory:) หากคุณใช้การย้ายข้อมูลในฐานข้อมูลดังกล่าวเห็นได้ชัดว่าในครั้งต่อไปที่คุณต้องการบอกว่าสร้างการแก้ไขโดยอัตโนมัติฐานข้อมูลจะยังคงอยู่ในสถานะเดิม (ว่างเปล่า) ดังนั้น alembic จะบ่นว่าฐานข้อมูลเป้าหมายไม่ถึง วันที่. วิธีแก้ปัญหาคือเปลี่ยนไปใช้ฐานข้อมูลที่มีอยู่


0

ในการแก้ไขข้อผิดพลาดนี้ให้ลบไฟล์การย้ายข้อมูลล่าสุด (ไฟล์ python) จากนั้นลองทำการย้ายข้อมูลอีกครั้ง



-6

เพื่อแก้ปัญหานี้ฉันวาง (ลบ) ตารางในการย้ายข้อมูลและเรียกใช้คำสั่งเหล่านี้

flask db migrate

และ

flask db upgrade
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.