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
残念ながら、データベースを最新の状態に保つ方法と、リンクで指定されたコードをどこで/どのように書くべきかについてはよくわかりません。移行の経験がある場合、これについて説明してください
ありがとう
手動または_--autogenerate
_として移行を作成した後、_alembic upgrade head
_で移行を適用する必要があります。 db.create_all()
をシェルから使用した場合、_alembic stamp head
_を使用して、データベースの現在の状態がすべての移行のアプリケーションを表していることを示すことができます。
「./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)
そして今、私は再び移行を行うことができます。
何らかの理由で移行ファイルの一部を削除する必要がありました。理由はわかりません。しかし、それで問題は解決しました。
1つの問題は、データベースがすべての新しいテーブルなどで適切に更新されることですが、自動移行を使用すると移行ファイル自体に変更が表示されないことです。
誰かがより良い解決策を持っている場合は、私に教えてください、今のところ私の解決策は一種のハッキングです。
このエラーを修正するには、最新の移行ファイル(a pythonファイル)を削除してから、新たに移行を実行してください。
これを解決するために、移行時にテーブルをドロップ(削除)し、これらのコマンドを実行します
flask db migrate
そして
flask db upgrade