本项目使用 Alembic 进行数据库 schema 迁移管理。
数据库迁移允许我们:
- 跟踪数据库 schema 的变更历史
- 在不丢失数据的情况下修改表结构
- 在团队成员之间同步数据库变更
- 支持数据库版本回滚
当你修改了模型(添加/删除/修改字段)后,运行:
uv run alembic revision --autogenerate -m "描述你的变更"这会在 alembic/versions/ 目录下生成一个新的迁移文件。
查看当前数据库的迁移状态:
uv run alembic current查看迁移历史:
uv run alembic history将数据库升级到最新版本:
uv run alembic upgrade head升级到特定版本:
uv run alembic upgrade <revision_id>回滚一个版本:
uv run alembic downgrade -1回滚到特定版本:
uv run alembic downgrade <revision_id>完全回滚到初始状态:
uv run alembic downgrade base-
修改模型
在
llm_perf_platform/models/task_record.py中添加新字段:class TaskRecord(SQLModel, table=True): # 现有字段... new_field: Optional[str] = Field(default=None)
-
生成迁移
uv run alembic revision --autogenerate -m "Add new_field to TaskRecord" -
检查生成的迁移文件
打开
alembic/versions/xxxx_add_new_field_to_taskrecord.py,确认迁移操作正确。 -
应用迁移
uv run alembic upgrade head
-
验证
启动应用,确认新字段工作正常。
这种情况下自动生成的迁移可能需要手动调整,特别是需要数据转换时。
- 修改模型
- 生成迁移:
uv run alembic revision --autogenerate -m "Change field type" - 手动编辑迁移文件,添加数据转换逻辑
- 应用迁移
SQLite 不支持某些 ALTER TABLE 操作(如修改列类型、删除列等)。在这种情况下,Alembic 会使用"批量操作"模式:
- 创建新表
- 复制数据
- 删除旧表
- 重命名新表
这个过程是自动的,但在生产环境中要特别小心。
在应用到生产环境前,务必:
- 在开发环境测试迁移
- 备份生产数据库
- 在测试环境用生产数据副本测试迁移
- 提交迁移文件到版本控制
- 拉取代码后记得运行
uv run alembic upgrade head - 避免多人同时修改数据库schema导致冲突
alembic.ini: Alembic 主配置文件alembic/env.py: 环境配置,包含数据库连接和模型导入alembic/versions/: 存放所有迁移文件
当前数据库已初始化,包含以下表:
taskrecord: 任务记录表(包含 user_id 字段)useraccount: 用户账户表modelinstance: 模型实例表
初始迁移已应用(revision: 3123e7766f8a)