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

4.8 KiB
Raw Blame History

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. 首次迁移(目标库为空)

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. 目标库已有数据(先清空再迁移)

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. 先删除目标库再重建

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. 干跑模式(查看计划)

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 读取

🔧 依赖安装

# 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_*)和业务表