# Alembic 数据库迁移使用说明 ## 概述 本项目使用 Alembic 进行数据库版本管理和迁移。Alembic 是 SQLAlchemy 的数据库迁移工具,可以自动生成迁移脚本并管理数据库结构变更。 ## 目录结构 ``` backend/ ├── alembic/ │ ├── versions/ # 迁移脚本目录 │ │ └── 001_initial_migration.py │ ├── env.py # Alembic 环境配置 │ └── script.py.mako # 迁移脚本模板 ├── alembic.ini # Alembic 配置文件 └── migrations/ # 手动SQL脚本(备用) ``` ## 基本命令 ### 1. 创建新的迁移脚本 ```bash # 自动生成迁移脚本(推荐) alembic revision --autogenerate -m "描述信息" # 手动创建空迁移脚本 alembic revision -m "描述信息" ``` ### 2. 执行迁移 ```bash # 升级到最新版本 alembic upgrade head # 升级到指定版本 alembic upgrade # 降级到指定版本 alembic downgrade # 降级一个版本 alembic downgrade -1 ``` ### 3. 查看迁移历史 ```bash # 查看所有迁移版本 alembic history # 查看当前数据库版本 alembic current # 查看待执行的迁移 alembic heads ``` ## 使用流程 ### 首次使用(初始化数据库) 1. 确保数据库已创建: ```sql CREATE DATABASE IF NOT EXISTS agent_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` 2. 执行初始迁移: ```bash alembic upgrade head ``` ### 修改模型后创建迁移 1. 修改 `backend/app/models/` 中的模型文件 2. 自动生成迁移脚本: ```bash alembic revision --autogenerate -m "添加新字段" ``` 3. 检查生成的迁移脚本(`alembic/versions/` 目录) 4. 执行迁移: ```bash alembic upgrade head ``` ## 注意事项 1. **模型导入**:确保 `alembic/env.py` 中导入了所有模型,这样 Alembic 才能检测到模型变更。 2. **迁移脚本检查**:自动生成的迁移脚本可能不完美,需要手动检查和调整: - 检查索引创建/删除 - 检查外键约束 - 检查默认值设置 - 检查字符集和排序规则 3. **生产环境**: - 在生产环境执行迁移前,务必先备份数据库 - 在测试环境充分测试迁移脚本 - 考虑数据迁移的兼容性 4. **回滚**:如果迁移出现问题,可以使用 `alembic downgrade` 回滚到之前的版本。 ## 常见问题 ### 1. 迁移脚本检测不到模型变更 **原因**:模型没有被正确导入 **解决**:检查 `alembic/env.py` 中的模型导入,确保所有模型都被导入。 ### 2. 迁移执行失败 **原因**:可能是数据库连接问题、权限问题或迁移脚本错误 **解决**: - 检查数据库连接配置 - 检查数据库用户权限 - 查看错误日志,修复迁移脚本 ### 3. 迁移冲突 **原因**:多人同时创建迁移脚本导致版本冲突 **解决**: - 使用 `alembic merge` 合并分支 - 或者手动解决冲突,调整 `down_revision` ## 与手动SQL脚本的关系 项目中的 `backend/migrations/` 目录包含手动SQL脚本,这些脚本用于: - 快速初始化数据库(不依赖Alembic) - 特定场景的数据库操作 - 数据迁移脚本 **建议**:优先使用 Alembic 进行数据库结构管理,手动SQL脚本作为补充。 ## 示例 ### 添加新表 1. 在 `app/models/` 中创建新模型 2. 运行 `alembic revision --autogenerate -m "添加新表"` 3. 检查生成的迁移脚本 4. 运行 `alembic upgrade head` ### 修改现有表 1. 修改模型定义 2. 运行 `alembic revision --autogenerate -m "修改表结构"` 3. 检查生成的迁移脚本(可能需要手动调整) 4. 运行 `alembic upgrade head`