无法使用 Flask-Migrate (Alembic) 迁移或升级数据库
Can't migrate or upgrade database with Flask-Migrate (Alembic)
我一直在使用 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 将数据库版本存储在它创建的名为 alembic_version
的 table 中。此 table 包含单个字段和行 alembic_version.version_num
。确保此值与 migrations/version
中最新文件的文件名匹配。此版本号也包含在修订文件中的 revision
变量中,该变量通常显示在文件的第 26 行。确保它与数据库版本匹配。
另一种选择是简单地删除数据库并使用 alembic 重新创建它。如果这是一个开发环境,其中数据不重要,那将是我的建议。
我觉得接受的答案有点过于复杂。我有同样的问题,我解决它的方法是简单地删除包含编码错误的迁移。无论如何您都不需要它,因为它再次被错误编码。在 migrations/versions
文件夹中找到最新的迁移,将其删除,然后再次 运行 您的迁移并升级。您不需要为了迁移而删除数据库中的数据。
alembic.util.CommandError: Target database is not up to date.
您可以尝试以下步骤吗?
python manage.py db stamp head
python manage.py db migrate
python manage.py db upgrade
'stamp' the revision table with the given revision; don't run any migrations
第一步是删除创建的最新迁移版本,然后您应该使用这些命令:
flask db stamp head
flask db migrate -m "newMigration"
flask db upgrade
我一直在使用 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 将数据库版本存储在它创建的名为 alembic_version
的 table 中。此 table 包含单个字段和行 alembic_version.version_num
。确保此值与 migrations/version
中最新文件的文件名匹配。此版本号也包含在修订文件中的 revision
变量中,该变量通常显示在文件的第 26 行。确保它与数据库版本匹配。
另一种选择是简单地删除数据库并使用 alembic 重新创建它。如果这是一个开发环境,其中数据不重要,那将是我的建议。
我觉得接受的答案有点过于复杂。我有同样的问题,我解决它的方法是简单地删除包含编码错误的迁移。无论如何您都不需要它,因为它再次被错误编码。在 migrations/versions
文件夹中找到最新的迁移,将其删除,然后再次 运行 您的迁移并升级。您不需要为了迁移而删除数据库中的数据。
alembic.util.CommandError: Target database is not up to date.
您可以尝试以下步骤吗?
python manage.py db stamp head
python manage.py db migrate
python manage.py db upgrade
'stamp' the revision table with the given revision; don't run any migrations
第一步是删除创建的最新迁移版本,然后您应该使用这些命令:
flask db stamp head
flask db migrate -m "newMigration"
flask db upgrade