Files
aiagent/backend/README_ALEMBIC.md

157 lines
3.7 KiB
Markdown
Raw Normal View History

2026-01-19 00:09:36 +08:00
# 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 <revision>
# 降级到指定版本
alembic downgrade <revision>
# 降级一个版本
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`