Database target bukan yang terbaru

101

Saya ingin melakukan migrasi untuk aplikasi Flask. Saya menggunakan Alembic.

Namun, saya menerima kesalahan berikut ini.

Target database is not up to date.

Secara online, saya membaca bahwa itu ada hubungannya dengan ini. http://alembic.zzzcomputing.com/en/latest/cookbook.html#building-an-up-to-date-database-from-scratch

Sayangnya, saya tidak begitu mengerti cara memperbarui database dan di mana / bagaimana saya harus menulis kode yang diberikan di tautan. Jika Anda memiliki pengalaman dengan migrasi, dapatkah Anda menjelaskan hal ini untuk saya

Terima kasih

GangstaGraham
sumber

Jawaban:

104

Setelah membuat migrasi, baik secara manual atau sebagai --autogenerate, Anda harus menerapkannya dengan alembic upgrade head. Jika Anda menggunakan db.create_all()dari shell, Anda dapat menggunakan alembic stamp headuntuk menunjukkan bahwa status database saat ini mewakili aplikasi dari semua migrasi.

davidisme
sumber
65

Ini Bekerja untuk saya

$ flask db stamp head
$ flask db migrate
$ flask db upgrade
Nsagha Kingsly
sumber
38

Jawaban saya adalah seperti pertanyaan ini, Ketika saya mengeksekusi "./manage.py db migrate -m 'Add relationship'", kesalahan muncul seperti ini "alembic.util.exc.CommandError: Target database is not up to date."

Jadi saya memeriksa status migrasi saya:

(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

dan menemukan bahwa kepala dan arus berbeda!

Saya memperbaikinya dengan melakukan langkah-langkah ini:

(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

Dan sekarang arusnya sama di kepala

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

Dan sekarang saya bisa melakukan migrasi lagi.

LittleLogic
sumber
Bekerja seperti pesona! Saya rasa inilah cara terbaik untuk menangani masalah ini!
attaboyabhipro
Sama disini! Bekerja dengan lancar. Saya tahu itu ada hubungannya dengan kepala db dan arus, tetapi tidak tahu ada perintah "cap". Terima kasih!
Subspasial
10

Ini dapat diselesaikan dengan banyak cara:

1 Untuk memperbaiki kesalahan ini, hapus file migrasi terbaru (file python) kemudian coba lakukan migrasi lagi.

Jika masalah masih berlanjut, coba perintah ini:

$ 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.
Anupam Haldkar
sumber
8

Saya harus menghapus beberapa file migrasi saya karena suatu alasan. Tidak yakin kenapa. Tapi itu memperbaiki masalahnya, semacam itu.

Satu masalah adalah bahwa database akhirnya diperbarui dengan benar, dengan semua tabel baru, dll., Tetapi file migrasi itu sendiri tidak menunjukkan perubahan apa pun ketika saya menggunakan automigrate.

Jika seseorang memiliki solusi yang lebih baik, beri tahu saya, karena saat ini solusi saya agak hacky.

GangstaGraham
sumber
Saya tahu ini agak tua sekarang, tetapi apakah tabel Anda mewarisi dari Base? Saya memiliki masalah yang sama dan automigrate tidak mengambil perubahan karena fakta bahwa tabel baru saya tidak mewarisi dari Basis tempat basis berada Base = declarative_base() dan juga ingatfrom 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.

Anda dapat menemukan info lebih lanjut di dokumentasi https://flask-migrate.readthedocs.io/en/latest/

Sergi Ramón
sumber
2

Saya juga mengalami kepala yang berbeda dan saya ingin mengubah salah satu bidang dari string menjadi integer, jadi jalankan dulu:

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

Ini diselesaikan sekarang!

Serg
sumber
1

Ini juga dapat terjadi jika Anda, seperti saya sendiri, baru saja memulai proyek baru dan Anda menggunakan database SQLite dalam memori ( sqlite:///:memory:). Jika Anda menerapkan migrasi pada database seperti itu, jelas lain kali Anda ingin mengatakan buat revisi secara otomatis, database akan tetap dalam keadaan semula (kosong), jadi alembic akan mengeluh bahwa database target tidak sesuai tanggal. Solusinya adalah beralih ke database yang ada.

jbasko
sumber
0

Untuk memperbaiki kesalahan ini, hapus file migrasi terbaru (file python) lalu coba lakukan migrasi lagi.

Patrick Mutuku
sumber
-2

Coba jatuhkan semua tabel sebelum menjalankan perintah peningkatan db.

Rafael Rotiroti
sumber
-6

Untuk mengatasi ini, saya menjatuhkan (menghapus) tabel dalam migrasi dan menjalankan perintah ini

flask db migrate

dan

flask db upgrade
fill_J
sumber