web-dev-qa-db-ja.com

ターゲットデータベースが最新ではありません

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

残念ながら、データベースを最新の状態に保つ方法と、リンクで指定されたコードをどこで/どのように書くべきかについてはよくわかりません。移行の経験がある場合、これについて説明してください

ありがとう

51
GangstaGraham

手動または_--autogenerate_として移行を作成した後、_alembic upgrade head_で移行を適用する必要があります。 db.create_all()をシェルから使用した場合、_alembic stamp head_を使用して、データベースの現在の状態がすべての移行のアプリケーションを表していることを示すことができます。

69
davidism

「./manage.py db migrate -m 'Add relationship'」を実行すると、「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)

そして今、私は再び移行を行うことができます。

16
LittleLogic

何らかの理由で移行ファイルの一部を削除する必要がありました。理由はわかりません。しかし、それで問題は解決しました。

1つの問題は、データベースがすべての新しいテーブルなどで適切に更新されることですが、自動移行を使用すると移行ファイル自体に変更が表示されないことです。

誰かがより良い解決策を持っている場合は、私に教えてください、今のところ私の解決策は一種のハッキングです。

8
GangstaGraham

このエラーを修正するには、最新の移行ファイル(a pythonファイル)を削除してから、新たに移行を実行してください。

1
Patrick Mutuku

これを解決するために、移行時にテーブルをドロップ(削除)し、これらのコマンドを実行します

flask db migrate

そして

flask db upgrade
0
fill_J