目标数据库不是最新的

我想做一个 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

不幸的是,我不太理解如何使数据库更新,以及在哪里/如何编写链接中给出的代码。

120086 次浏览

由于某种原因,我不得不删除一些迁移文件。不知道为什么。不过问题解决了,算是吧。

一个问题是,数据库最终得到了正确的更新,包括所有新表等,但是当我使用自动迁移时,迁移文件本身并没有显示任何更改。

如果有人有更好的解决方案,请让我知道,因为现在我的解决方案有点粗糙。

在创建迁移(手动或作为 --autogenerate)之后,必须使用 alembic upgrade head应用它。如果从 shell 中使用 db.create_all(),则可以使用 alembic stamp head指示数据库的当前状态表示所有迁移的应用程序。

要修复此错误,请删除最新的迁移文件(一个 python 文件) ,然后尝试重新执行迁移。

在执行 db update 命令之前尝试删除所有表。

我的情况就像这个问题,当我执行”。Py db shift-m‘ Add relations’”,出现的错误如下所示 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)

现在我可以再次迁徙了。

为了解决这个问题,我在迁移中删除表并运行这些命令

flask db migrate

还有

flask db upgrade

这招对我很管用

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

我确实遇到了不同的情况,我想把其中一个字段从 string 改为 int,所以首先运行:

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

现在解决了!

如果您像我一样刚刚启动了一个新项目,并且正在使用内存中的 SQLite 数据库(sqlite:///:memory:) ,也可能发生这种情况。如果您对这样的数据库应用迁移,显然下次您想说自动生成修订时,数据库仍然处于其原始状态(空) ,因此 alembic 会抱怨目标数据库没有更新。解决方案是切换到持久化数据库。

$ 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/中找到更多信息

这个问题可以通过多种方式解决:

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.

我也有同样的问题输入与 flask db migrate 我用过 flask db stamp head 然后 flask db migrate