天天看点

python使用flask-migrate迁移数据库时遇到的问题

报错

Can't locate revision identified by xxxxx

回顾

使用flask-migrate时,步骤是:

python manage.py db init   #初始化,之后生成一个migrations文件夹
python mange.py db migrate 
python manage.py db upgrade
           

解决方法

  • 确认你之前的操作步骤为以上三步。(初始化为三个步骤,之后的迁移只需要执行后两个步骤)
  • 确认你当前使用的数据库没有存放除了models.py中模型对应的表以外的表。如果有,请手动备份到另一个数据库。由于存在这些无关表,flask-migrate尝试去删除这些无关表,当这些表存在外键索引时,删除失败,则可能导致数据库迁移失败。
  • 如果数据库中存在其他无关表,手动备份后,可能需要删除数据库中的alembic_version表,并且删除migrations文件夹,重新执行上面的三条语句。(请看最搞笑的原因)alembic_version表保留了一个版本号,需要重新生成。

最搞笑的原因

由于我当前的flask web项目是在另一个flask web的项目上改写的,数据库遗留了之前的migrations,以及之前的表,由于一直upgrade失败,一直没有理过数据库迁移这块出现的问题。之前的数据库表与表之间存在外键索引,外键的存在导致数据库一直迁移失败。当我尝试在数据库中放一张没有外键索引的表时,使用迁移语句,发现flask-migrate会把这个无关的表删除。所以到底要不要删除alembic_version表,请结合实际,我懒得去试了。拜拜。