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


104

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

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

ありがとう

回答:


109

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


69

これは私のために働いた

$ flask db stamp head
$ flask db migrate
$ flask db upgrade

39

「./manage.pydbmigrate-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

こっちも一緒!スムーズに動作しました。私はそれがdbheadsとcurrentに関係していることを知っていましたが、「stamp」コマンドがあることを知りませんでした。ありがとう!
サブスパシアン

13

これは多くの方法で解決できます:

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.

9

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

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

誰かがより良い解決策を持っているなら、私に知らせてください。今のところ私の解決策はちょっとハッキーです。


今は少し古いと思いますが、テーブルはBaseから継承していますか?私は同じ問題を抱えていましたが、新しいテーブルがbaseが存在するBaseから継承されておらずBase = declarative_base() 、覚えているため、自動移行が変更をfrom sqlalchemy.ext.declarative import declarative_base


2

私も別のヘッドに遭遇し、フィールドの1つを文字列から整数に変更したかったので、最初に実行します。

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