解决INFO [alembic.runtime.migration] Will assume non-transactional DDL问题
预计所需阅读时间: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检测到。
继续阅读