我一直在使用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时,我得到了最新的数据库版本,而这正是我所坚持的。
有没有解决办法?谢谢。

最佳答案

alembic将db版本存储在它创建的一个名为alembic_version的表中。此表包含单个字段和行。确保此值与alembic_version.version_num中最新文件的文件名匹配。此版本号也包含在修订文件的migrations/version变量中,该变量通常显示在文件的第26行。确保它与数据库版本匹配。
另一个选项是简单地删除数据库,然后使用alembic重新创建它。如果这是一个开发环境,其中的数据并不重要,那将是我的建议。

09-26 18:59
查看更多