Pav*_*dhu 11 python sqlalchemy flask alembic flask-migrate
我一直在使用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']
Run Code Online (Sandbox Code Playgroud)
我所做的是db.Text取而代之的db.Integer是外键.
当我尝试运行新的迁移时,我得到了这个:
alembic.util.CommandError: Target database is not up to date.
Run Code Online (Sandbox Code Playgroud)
所以现在我被卡住了.我无法升级数据库,也无法运行迁移.我尝试使用以下内容降级到较旧的数据库版本:
python manage.py db downgrade --sql b877018671c:36949b1cca31
Run Code Online (Sandbox Code Playgroud)
但是当我运行时,python manage.py db current我得到了最新的数据库版本,我被困在其中.
有没有解决这个问题?谢谢.
Kel*_*ila 18
Alembic将db版本存储在它创建的表中alembic_version.该表包含单个字段和行alembic_version.version_num.确保此值与最新文件的文件名匹配migrations/version.此版本号也包含在revision变量中的修订文件中,该变量通常显示在文件的第26行.确保它与db版本匹配.
另一种选择是简单地删除数据库并使用alembic重新创建它.如果这是一个开发环境,数据不重要,那将是我的建议.
Tae*_*ott 14
我觉得接受的答案有点过于复杂了.我有同样的问题,我解决它的方法是简单地删除包含编码错误的迁移.你不需要它,因为它再次编码不正确.在migrations/versions文件夹中找到最新的迁移,将其删除,然后再次运行迁移并升级.您不需要删除数据库中的数据只是为了迁移它.
Jun*_*Jun 11
alembic.util.CommandError:目标数据库不是最新的。
您可以尝试以下步骤吗?
python manage.py db stamp head
python manage.py db migrate
python manage.py db upgrade
Run Code Online (Sandbox Code Playgroud)
用给定的修订版“标记”修订表;不要运行任何迁移