133

我想为 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

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

4

11 回答 11

139

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

于 2013-07-21T20:25:44.000 回答
109

这对我有用

$ flask db stamp head
$ flask db migrate
$ flask db upgrade
于 2019-10-28T05:43:27.017 回答
43

我的情况是这样的问题,当我执行“./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)

现在我可以再次进行迁移。

于 2018-12-03T12:31:28.627 回答
25

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

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.
于 2020-05-23T09:48:57.673 回答
11

由于某种原因,我不得不删除一些迁移文件。不知道为什么。但这解决了问题,有点。

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

如果有人有更好的解决方案,请告诉我,因为现在我的解决方案有点老套。

于 2013-07-21T04:56:34.020 回答
11
$ 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/中找到更多信息

于 2020-01-06T12:02:33.090 回答
4

我也遇到了不同的头脑,我想将其中一个字段从字符串更改为整数,所以首先运行:

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

现在解决了!

于 2019-11-02T01:10:54.937 回答
2

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

于 2018-06-24T19:00:21.030 回答
1

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

于 2019-11-13T16:00:37.883 回答
-3

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

于 2018-09-19T16:45:30.410 回答
-7

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

flask db migrate

flask db upgrade
于 2019-02-08T19:42:26.307 回答