预计所需阅读时间:2分钟

最近在用Flask框架开发商城,数据库的表很多,也要根据业务类型调整数据库的结果,要对对moddel.py这些文件进行修改。然后在这次修改商城的数据表的字段过程中,在命令行输入flask db migrate后,发现以下信息,然后无法用flask db upgrade进行升级。

INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.env] No changes in schema detected.

这个信息提示是说没有检测到数据库的模型发生变化,因此也不生成DDL语句去修改数据库。

后来经过多方查证和请教,主要flask_migrate默认不检测已在字段的类型与长度的改变,一般只检测到数据表、字段的增加与删除。对于这种情况可以用以下办法解决:

# 导入
from flask_migrate import Migrate

# 初始化插件对象,添加参数
migrate = Migrate(compare_type=True)

# 然后在主程序引入这个对象
migrate.init_app(app, db)

如果还有用flask db migrate出现这种检测不到的现象,那可以是在Flask的主程序app.py或manage.py中没有导入修改过的数据库模型类。在主程序文件中导入数据库模型类,例如User、Article、Category这些,即可让flask_migrate检测到。