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

如何在SQLModel中实现类似Django/flask-migrate的数据库迁移?

问题原因

SQLModel.metadata.create_all(engine) 仅会创建数据库中不存在的表,不会对比和同步已存在表的结构变更,因此修改字段类型、增删字段后重复调用该方法不会生效,属于预期行为。

数据库迁移方案

SQLModel 基于 SQLAlchemy 开发,可以直接使用 SQLAlchemy 生态的官方迁移工具 Alembic 实现表结构自动同步,功能和 Django migrations、flask-migrate 完全对齐(flask-migrate 底层也是封装的 Alembic)。

具体操作步骤
  • 第一步:安装Alembic
    pip install alembic
    
  • 第二步:初始化迁移目录
    在项目根目录执行命令,会自动生成alembic目录和配置文件alembic.ini
    alembic init alembic
    
  • 第三步:修改迁移配置
    1. 打开alembic.ini,将sqlalchemy.url的值替换为你自己的数据库连接串,例如:
      sqlalchemy.url = postgresql://user:pass@localhost/dbname
      
    2. 打开alembic/env.py,修改元数据配置,导入你的所有模型和SQLModel的元数据:
      # 原有导入代码不变,新增以下导入
      from sqlmodel import SQLModel
      # 替换为你自己的模型文件导入路径
      from your_models import Hero
      
      # 修改target_metadata赋值
      target_metadata = SQLModel.metadata
      
  • 第四步:生成迁移脚本
    执行命令会自动对比模型和现有表结构的差异,生成迁移脚本,后面的备注可以自定义
    alembic revision --autogenerate -m "修改Hero表status字段类型"
    
  • 第五步:执行迁移同步到数据库
    alembic upgrade head
    
注意事项

自动生成的迁移脚本建议先打开检查逻辑是否符合预期,部分特殊变更(例如字段默认值调整、枚举类型变更等)可能存在识别偏差,确认无误后再执行迁移操作即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:54:02