You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

未使用Flask Migrate的Heroku PostgreSQL生产库如何升级?

问题根因

你之前通过db.create_all()初始化生产库时,没有生成Flask Migrate(底层为Alembic)用来记录数据库版本的alembic_version系统表,Alembic无法判断当前生产库的表结构对应哪个迁移版本,会默认没有待执行的变更,所以执行flask db upgrade时没有任何实际操作。

解决步骤(全程不影响现有生产数据)

前置清理

  • 删除本地migrations/versions目录下所有重复生成的无效迁移文件,仅保留第一次执行flask db migrate生成的、正确识别到4个新增字段的迁移文件(版本号为a470127eb7c5的那份)
  • 将清理后的迁移文件夹提交到Git,推送到Heroku主分支,确保生产环境的迁移文件和本地完全一致

生产环境配置

  1. 进入Heroku应用的Shell终端,执行命令查看所有迁移记录:
    flask db history
    输出结果中最旧的那条迁移,就是和你当前生产库表结构匹配的基线版本,记录下它的版本号

备注:如果flask db history的输出仅包含你那份新增字段的迁移,说明你之前没有生成初始建表的全量迁移,可临时将该份加字段的迁移移出versions目录,执行flask db migrate生成全量建表的初始迁移,再将加字段的迁移移回目录即可,此时基线版本为新生成的初始迁移的版本号。

  1. 执行标记命令,给生产库打基线版本,告诉Alembic当前库已经完成了该版本之前的所有变更:
    flask db stamp <你记录的基线版本号>
  2. 执行升级命令应用待完成的迁移:
    flask db upgrade
    执行完成后即可看到4个新增字段创建成功,所有现有业务数据会完整保留。
后续维护规范
  • 所有迁移文件必须纳入Git版本管理,团队成员拉取代码后如果存在新的迁移文件,直接执行flask db upgrade就能同步表结构
  • 每次修改模型后仅执行一次flask db migrate,确认生成的迁移文件内容符合预期后再提交,避免生成重复冗余的迁移文件

内容的提问来源于stack exchange,提问作者Hector Astrom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:15:05