目标数据库不是最新的

时间:2013-07-21 04:07:18

标签: python flask sqlalchemy alembic

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

不幸的是,我不太明白如何让数据库保持最新状态以及我应该在哪里/如何编写链接中给出的代码。如果您有迁移经验,可以帮我解释一下

由于

10 个答案:

答案 0 :(得分:67)

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

答案 1 :(得分: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.

答案 2 :(得分:10)

我的陈述就像这样的问题,当我执行“ ./manage.py db migration -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)

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

答案 3 :(得分:8)

出于某种原因,我不得不删除部分迁移文件。不知道为什么。但这解决了这个问题,有点像。

一个问题是数据库最终会正确更新,包含所有新表等,但迁移文件本身在使用自动迁移时不会显示任何更改。

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

答案 4 :(得分:7)

这对我有用

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

答案 5 :(得分:1)

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

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

现在解决了!

答案 6 :(得分:0)

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

答案 7 :(得分:-1)

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

答案 8 :(得分:-1)

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

答案 9 :(得分:-2)

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

flask db migrate

flask db upgrade