签入版本

This commit is contained in:
2026-09-16 10:11:44 +08:00
parent bf08cf1248
commit 20d8a85989
205 changed files with 34363 additions and 0 deletions
@@ -0,0 +1,83 @@
# 跨库数据迁移
:::tip 说明
项目提供 `scripts/migrate_db.py` 脚本,支持在不同数据库之间迁移数据(如 MySQL → PostgreSQL / SQL Server / SQLite / Oracle)。脚本独立运行,参数显式给出,不依赖 `.env`。
:::
## 使用场景
| 场景 | 说明 |
|:-----|:-----|
| MySQL → PostgreSQL | 生产环境切换数据库 |
| MySQL → SQL Server | 企业环境适配 |
| MySQL → SQLite | 开发/测试环境轻量化 |
| MySQL → Oracle | 企业级数据库适配 |
## 命令行参数
```bash
python scripts/migrate_db.py --help
```
| 参数 | 必填 | 说明 | 示例 |
|:-----|:-----|:-----|:-----|
| `--source-db` | 是 | 源数据库类型 | `mysql` |
| `--target-db` | 是 | 目标数据库类型 | `postgresql` |
| `--source-url` | 是 | 源数据库连接 URL | `mysql+pymysql://root:123456@localhost:3306/db` |
| `--target-url` | 是 | 目标数据库连接 URL | `postgresql://postgres:123456@localhost:5432/db` |
## 使用示例
### MySQL → PostgreSQL
```bash
python scripts/migrate_db.py \
--source-db mysql \
--target-db postgresql \
--source-url "mysql+pymysql://root:123456@localhost:3306/djangoadmin" \
--target-url "postgresql://postgres:123456@localhost:5432/djangoadmin"
```
### MySQL → SQLite
```bash
python scripts/migrate_db.py \
--source-db mysql \
--target-db sqlite \
--source-url "mysql+pymysql://root:123456@localhost:3306/djangoadmin" \
--target-url "sqlite:///djangoadmin.db"
```
## 迁移流程
```
1. 连接源数据库和目标数据库
2. 读取源数据库所有表结构
3. 在目标数据库创建对应表(Base.metadata.create_all)
4. 逐表读取源数据 → 批量插入目标数据库
5. 输出迁移统计(表数、行数、耗时)
```
## 注意事项
:::warning 迁移前备份
跨库迁移前务必备份目标数据库,避免数据丢失。
:::
- 迁移脚本会先在目标库创建表结构(如已存在则跳过)
- 数据迁移采用批量插入,大表迁移可能需要较长时间
- 不同数据库的字段类型差异由 SQLAlchemy 方言层自动处理
- 迁移完成后建议在目标库执行 `scripts/seed_dict.py` 补充字典数据
## 相关脚本
| 脚本 | 用途 |
|:-----|:-----|
| `scripts/migrate_db.py` | 跨库数据迁移 |
| `scripts/seed_dict.py` | 字典数据初始化 |
| `scripts/init_db.py` | 数据库初始化(建库建表) |
| `scripts/health_check.py` | 健康检查 |
## 总结
跨库数据迁移脚本支持 MySQL / PostgreSQL / SQL Server / SQLite / Oracle 之间的数据迁移,参数显式给出,不依赖 `.env` 配置。迁移前务必备份目标数据库。