我一直在使用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重新创建它。如果这是一个开发环境,其中的数据并不重要,那将是我的建议。