【发布时间】:2015-12-24 06:36:27
【问题描述】:
我一直在使用 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 时,我得到了最新的数据库版本。
有解决办法吗?谢谢。
【问题讨论】:
-
听起来您有一个尚未运行的迁移(糟糕的迁移)。要么将其编辑为正确,要么将其删除并再次生成迁移。
-
如何删除迁移?
-
迁移只是文件。你只需要删除文件。 Flask-Migrate 通常将它们存储在
migrations/version中。 -
我找到了最新的迁移文件并将其删除,但是当我尝试运行迁移时,我仍然设法得到
Target database is not up to date.
标签: python flask sqlalchemy alembic flask-migrate