15

我一直在使用 Flask-Migrate (Alembic) 来更新我的数据库。我更新了我的models.py文件,但是我犯了一个错误。我运行了迁移并去升级数据库,但是我收到了这个错误:

sqlalchemy.exc.IntegrityError: (_mysql_exceptions.IntegrityError) (1215, 'Cannot add foreign key constraint') [SQL: u'\nCREATE TABLE topics (\n\tid INTEGER NOT NULL AUTO_INCREMENT, \n\t`subjectID` INTEGER, \n\ttopic VARCHAR(150) NOT NULL, \n\tPRIMARY KEY (id), \n\tFOREIGN KEY(`subjectID`) REFERENCES subjects (id)\n)\n\n']

我所做的是有db.Text而不是db.Integer外键。

当我尝试运行新的迁移时,我得到了这个:

alembic.util.CommandError: Target database is not up to date.

所以现在我被困住了。我无法升级数据库也无法运行迁移。我尝试使用以下方法降级到旧数据库版本:

python manage.py db downgrade --sql b877018671c:36949b1cca31

但是当我运行时,python manage.py db current我得到了我卡住的最新数据库版本。

有解决办法吗?谢谢。

4

4 回答 4

21

Alembic 将 db 版本存储在它创建的名为alembic_version. 此表包含单个字段和行alembic_version.version_num。确保它的值与migrations/version. 此版本号也包含在修订文件中的revision变量中,该变量通常显示在文件的第 26 行。确保它与数据库版本匹配。

另一种选择是简单地删除数据库并使用 alembic 重新创建它。如果这是一个数据不重要的开发环境,那将是我的建议。

于 2015-09-27T02:20:10.927 回答
18

我觉得接受的答案有点过于复杂。我遇到了同样的问题,我解决它的方法是简单地删除包含编码错误的迁移。无论如何,您都不需要它,因为它再次编码不正确。在文件夹中找到最新的迁移migrations/versions,将其删除,然后再次运行迁移并升级。您不需要删除数据库中的数据只是为了迁移它。

于 2016-09-12T22:42:46.967 回答
11

alembic.util.CommandError:目标数据库不是最新的。

您可以尝试以下步骤吗?

python manage.py db stamp head
python manage.py db migrate
python manage.py db upgrade

用给定的修订“标记”修订表;不要运行任何迁移

于 2018-12-26T15:47:09.030 回答
0

第一步是删除创建的最新迁移版本,然后您应该使用以下命令:

 flask db stamp head
 flask db migrate -m "newMigration"
 flask db upgrade
于 2020-06-17T05:04:15.053 回答