Files
DjangoAdmin_Django_EleVue/scripts/SUMMARY.md
T
2026-09-11 11:39:07 +08:00

132 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# DjangoAdmin 数据库迁移工具 - 完整总结
## 🎯 核心功能
支持将 DjangoAdmin 项目的所有数据从 MySQL 迁移到 PostgreSQL、SQL Server、SQLite、Oracle 等数据库。
**迁移范围:35张表**
- Django内置表(11张):auth_permission, auth_group, auth_user, auth_group_permissions, auth_user_groups, auth_user_user_permissions, django_content_type, django_migrations, django_session, django_admin_log, captcha_captchastore
- 项目业务表(24张):django_dept, django_menu, django_role, django_user, django_city 等
## ✅ 成功验证
```
[迁移开始] 源: mysql:djangoadmin.django.elevue → 目标: postgresql:djangoadmin.django.elevue
[迁移开始] 待迁移 35 张表
[✓] [1/5] 建目标库 完成(耗时 62ms)
[✓] [2/5] 建表结构(35 张表 create_all) 完成(耗时 74ms)
[✓] [3/5] 逐表迁移数据 完成(耗时 37.5s),共 784612 行
[✓] [4/5] 重置自增序列 完成(耗时 2.2s)
[✓] [5/5] 逐表行数校验 完成(耗时 605ms),35 张表全部 PASS
[迁移完成] 成功:784612 行 / 35 张表 / 总耗时 40.8s
```
## 📁 文件清单
| 文件 | 说明 | 大小 |
|------|------|------|
| `migrate_db.py` | 主迁移脚本 | 30KB |
| `README.md` | 快速入门指南 | 3KB |
| `MIGRATE_README.md` | 详细使用说明 | 10KB |
| `CHANGELOG_MIGRATE.md` | 变更说明 | 5KB |
| `migrate_quick_ref.sh` | 快速参考脚本 | 4KB |
## 🚀 快速使用
### 1. 首次迁移(目标库为空)
```bash
python scripts/migrate_db.py \
--src-driver=mysql --src-host=127.0.0.1 --src-port=3306 \
--src-db=djangoadmin.django.elevue --src-user=root --src-pass=root \
--dst-driver=postgresql --dst-host=127.0.0.1 --dst-port=5432 \
--dst-db=djangoadmin.django.elevue --dst-user=postgres --dst-pass=postgres
```
### 2. 目标库已有数据(先清空再迁移)
```bash
python scripts/migrate_db.py --truncate-target \
--src-driver=mysql --src-host=127.0.0.1 --src-port=3306 \
--src-db=djangoadmin.django.elevue --src-user=root --src-pass=root \
--dst-driver=postgresql --dst-host=127.0.0.1 --dst-port=5432 \
--dst-db=djangoadmin.django.elevue --dst-user=postgres --dst-pass=postgres
```
### 3. 先删除目标库再重建
```bash
python scripts/migrate_db.py --drop-target-first \
--src-driver=mysql --src-host=127.0.0.1 --src-port=3306 \
--src-db=djangoadmin.django.elevue --src-user=root --src-pass=root \
--dst-driver=postgresql --dst-host=127.0.0.1 --dst-port=5432 \
--dst-db=djangoadmin.django.elevue --dst-user=postgres --dst-pass=postgres
```
### 4. 干跑模式(查看计划)
```bash
python scripts/migrate_db.py --dry-run \
--src-driver=mysql --src-host=127.0.0.1 --src-port=3306 \
--src-db=djangoadmin.django.elevue --src-user=root --src-pass=root \
--dst-driver=postgresql --dst-db=test \
--dst-user=postgres --dst-pass=postgres
```
## 📋 参数说明
| 参数 | 说明 | 默认值 |
|------|------|--------|
| `--src-driver` | 源库驱动 | mysql |
| `--src-host` | 源库主机 | 127.0.0.1 |
| `--src-port` | 源库端口 | 自动识别 |
| `--src-db` | 源库名称 | 必填 |
| `--src-user` | 源库用户名 | root |
| `--src-pass` | 源库密码 | 空 |
| `--dst-driver` | 目标库驱动 | 必填 |
| `--dst-host` | 目标库主机 | 127.0.0.1 |
| `--dst-port` | 目标库端口 | 自动识别 |
| `--dst-db` | 目标库名称 | 必填 |
| `--dst-user` | 目标库用户名 | postgres |
| `--dst-pass` | 目标库密码 | 空 |
| `--drop-target-first` | 先删除目标库 | False |
| `--truncate-target` | 先清空目标表数据 | False |
| `--dry-run` | 干跑模式 | False |
| `--chunk-size` | 每批插入行数 | 1000 |
| `--only-tables` | 只迁移指定表 | 空(全部) |
| `--skip-existing` | 跳过已存在的表 | False |
| `--skip-verify` | 跳过校验 | False |
| `--single-transaction` | 单事务模式 | False |
| `--prefix` | 表前缀 | 从 .env 读取 |
## 🔧 依赖安装
```bash
# PostgreSQL
pip install psycopg
# SQL Server
pip install pymssql
# Oracle
pip install oracledb
# MySQL(通常已安装)
pip install pymysql
```
## 📖 更多信息
- 快速参考:运行 `bash scripts/migrate_quick_ref.sh`
- 详细文档:查看 `scripts/MIGRATE_README.md`
- 变更说明:查看 `scripts/CHANGELOG_MIGRATE.md`
## 🎉 技术亮点
1. **方言可移植**:使用 SQLAlchemy ORM 模型定义表结构,保证在所有数据库方言中都有对应实现
2. **拓扑序迁移**:基础表在前,依赖表在后,保证引用完整性
3. **批量插入**:显式带 id 插入,保住裸列引用关系
4. **自动序列重置**:按方言重置自增序列(PG setval / MSSQL DBCC CHECKIDENT / Oracle sequence+trigger)
5. **数据校验**:迁移后自动对比源库和目标库的行数
6. **支持所有Django表**:包括内置表(auth_*、django_*、captcha_*)和业务表