flask-appbuilder项目集成flask-migrate无法检测Schema变更问题
问题原因
FAB默认会在初始化的post_init阶段自动执行db.create_all()创建所有表,导致flask db migrate对比数据库和模型时发现表结构完全一致,因此提示无变更。
解决方案
- 关闭FAB自动建表逻辑
修改app.py中AppBuilder的实例化代码,传入create_all=False参数禁用自动建表:
# 原代码 appbuilder = AppBuilder() # 修改后 appbuilder = AppBuilder(create_all=False)
清理无效文件
删除项目目录下已生成的app.db数据库文件和migrations迁移目录。重新执行迁移命令
export FLASK_APP=app.py flask db init flask db migrate -m "初始化迁移"
此时就能正常生成包含FAB内置表、自定义my_table表的迁移脚本,执行flask db upgrade即可完成表创建。
注意事项
- 禁用自动建表后,首次部署项目必须先执行
flask db upgrade创建所有表,否则FAB启动会因找不到表报错。 - 原来自动建表阶段会同步的角色、权限数据,你可以按需在应用启动时调用
appbuilder.security_manager.sync_roles()手动同步,也可以单独封装为自定义Flask命令按需执行。
内容的提问来源于stack exchange,提问作者japs
相关产品推荐
相关产品推荐

