Django 项目数据库迁移 + 旧数据导入

背景、问题与正确解决方案

随着项目的长期迭代,Django ORM 的字段结构会不断变化:

  • 某些字段被删除 / 重命名
  • 新字段被添加
  • 外键约束变化
  • 表结构由迁移文件自动维护

现在线上的旧数据库结构仍然停留在历史版本,它的字段与当前 Django 的模型不一致。

当我们要把旧数据库的数据迁移到最新 Django 版本时,就会面临:

  • 老库的字段结构和新库不一致
  • Django 的系统表(auth_*, django_migrations 等)在每个版本中都不同
  • 部分旧表在新版本中已不存在
  • 新版本 Django 期望由 migrations 自动创建表结构,而不是用旧 SQL 覆盖

从旧数据库导出sql,不包含表结构和django系统表和不存的表

因此,传统数据库迁移方法 完全行不通

传统方法为什么失败?

mysqldump 导出 SQL → mysql < sql 导入到新数据库 → 再 migrate 报错

arduino 复制代码
django.db.utils.OperationalError: (1054, "Unknown column 'xxx' in 'django_migrations'")

原因:表结构不一致导致 migrate 报错

  • 新 Django 模型删除了某个字段
  • 旧 SQL 仍然包含该字段
  • migrate 无法正确应用迁移,因为数据库结构被旧 SQL 覆盖了

先 migrate(数据库迁移)→ 再导入 SQL 报错

rust 复制代码
ERROR 1136 (21S01): Column count doesn't match value count at row 1

ERROR 1062 (23000): Duplicate entry '1' for key 'auth_permission.PRIMARY'

ERROR 1146 (42S02): Table 'new_db.xxx' doesn't exist

原因:数据结构不匹配、重复插入 Django 系统表,旧 SQL 包含 Django 系统表(auth_permission 等),旧 SQL 中存在新项目中已删除的表

正确解决方案(推荐)

由 Django 决定新结构(migrate),旧数据库只迁移业务数据(无结构)

  1. mysqldump导出旧数据库,不包含表结构,不导出 Django 系统表,新数据库没有的表,使用 --complete-insert 确保字段名对应
ini 复制代码
mysqldump -uroot -p old_db \
  -t --skip-triggers \
  --complete-insert \
  --ignore-table=old_db.auth_permission \
  --ignore-table=old_db.auth_group \
  --ignore-table=old_db.auth_group_permissions \
  --ignore-table=old_db.auth_user \
  --ignore-table=old_db.auth_user_groups \
  --ignore-table=old_db.auth_user_user_permissions \
  --ignore-table=old_db.django_content_type \
  --ignore-table=old_db.django_admin_log \
  --ignore-table=old_db.django_migrations \
  --ignore-table=old_db.django_session \
  --ignore-table=old_db.你的app_你的模型 \
  > data_only.sql
  1. 数据库迁移

    python manage.py migrate

这一过程由 Django 自动完成:

  • 创建最新结构
  • 添加新字段
  • 删除旧字段
  • 创建所有 Django 系统表
  • 维护外键约束
  1. 导入旧数据到新数据库
css 复制代码
mysql -uroot -p 新数据库 < data_only.sql
相关推荐
源码之家14 小时前
计算机毕业设计:基于Python的美食推荐分析系统 Django框架 爬虫 协同过滤推荐算法 可视化 推荐系统 数据分析 大数据(建议收藏)✅
爬虫·python·机器学习·django·flask·课程设计·美食
creaDelight17 小时前
基于 Django 5.x 的全功能博客系统 DjangoBlog 深度解析
后端·python·django
码界筑梦坊20 小时前
336-基于Python的肺癌数据可视化分析预测系统
开发语言·python·信息可视化·数据分析·django·vue·毕业设计
源码之家20 小时前
计算机毕业设计:基于Python与协同过滤的美食推荐系统 Django框架 可视化 协同过滤推荐算法 菜谱 食品 机器学习(建议收藏)✅
爬虫·python·机器学习·django·毕业设计·课程设计·美食
源码之家1 天前
计算机毕业设计:基于Python的美食推荐可视化系统 Django框架 可视化 协同过滤推荐算法 推荐系统 食物 食品 大数据 数据分析(建议收藏)✅
python·django·flask·课程设计·推荐算法·美食
源码之家1 天前
计算机毕业设计:基于Python的美食菜谱数据分析可视化系统 Django框架 爬虫 机器学习 数据分析 可视化 食物 食品 菜谱(建议收藏)✅
爬虫·python·数据分析·django·flask·课程设计·美食
源码之家1 天前
计算机毕业设计:基于Python的汽车数据可视化分析系统 Django框架 Scrapy爬虫 可视化 车辆 懂车帝大数据 数据分析 机器学习(建议收藏)✅
python·信息可视化·django·flask·汽车·课程设计·美食
wefly20172 天前
m3u8live.cn:免安装 HLS 在线播放器,流媒体调试效率神器
开发语言·javascript·python·django·ecmascript·hls.js 原理·m3u8 解析
大叔_爱编程2 天前
基于用户评论的热点问题挖掘与反馈分析系统-django+spider+uniapp
python·django·uni-app·毕业设计·源码·课程设计·spider
wefly20172 天前
jsontop.cn:一站式 JSON 全能工具集,开发全流程效率神器
前端·javascript·python·django·json·json在线转换