You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django 1.11删除迁移后如何导出数据库并复用数据

在Django 1.11中重置Migrations并复用现有数据的完整流程

在Django 1.11里重置migrations同时保留业务数据这个需求挺常见的,我帮你梳理一套靠谱的操作流程,一步步来就不会出错:

步骤1:导出现有数据库数据

首先得把当前的业务数据导出来,用Django自带的dumpdata命令就很方便,它能把数据转成JSON格式(也支持其他格式),后续导入也省心:

  • 运行命令:
    python manage.py dumpdata --exclude auth.permission --exclude contenttypes > data.json
    
    为啥要排除这两个呢?因为auth.permission和contenttypes是Django自动维护的系统数据,重新初始化项目后它们会自动生成,要是一起导进去反而容易引发冲突。如果你的项目里还有其他不需要导出的模型(比如测试用的临时模型),也可以用--exclude app_name.model_name来添加排除项。
  • 要是你的数据里有复杂的外键或关联关系,建议加上--natural-foreign和--natural-primary参数,能更好地保留数据的完整性:
    python manage.py dumpdata --exclude auth.permission --exclude contenttypes --natural-foreign --natural-primary > data.json
    

步骤2:清理Migrations文件和数据库迁移记录

接下来要彻底清理旧的migrations相关内容:

  1. 删除项目中的migrations文件:
    • 遍历每个app的migrations文件夹,删除里面除了__init__.py之外的所有文件(要是__init__.py也删了也没关系,后续makemigrations会自动重建)。
  2. 清空数据库中的迁移记录表:
    • 你可以通过数据库客户端直接执行SQL,比如PostgreSQL/MySQL都可以用:
      DELETE FROM django_migrations;
      
    • 或者用Django shell来操作:
      python manage.py shell
      
      然后执行:
      from django.db import connection
      with connection.cursor() as cursor:
          cursor.execute("DELETE FROM django_migrations;")
      
  3. 可选:完全重置数据库(如果有脏数据需要清理):
    • 要是你的数据库里有残留的脏数据,或者想彻底从头开始,可以用python manage.py flush清空所有表的数据(保留表结构);或者直接删除数据库再重新创建(比如PostgreSQL用dropdb+createdb,MySQL用DROP DATABASE+CREATE DATABASE)。

步骤3:重新生成初始迁移并同步数据库

现在可以重新创建migrations并同步到数据库了:

  • 为所有app生成初始迁移文件:
    python manage.py makemigrations
    
    这个命令会为每个app生成0001_initial.py这样的初始迁移文件,相当于重新开始记录模型变更。
  • 同步数据库:
    python manage.py migrate --fake-initial
    
    这里的--fake-initial很关键!如果你的数据库还保留着之前的表结构(没删库的话),用这个参数能让Django“假装”已经执行过初始迁移,避免因为表已存在而报错。要是你是完全新建的数据库,直接用python manage.py migrate就行。

步骤4:导入之前导出的数据

最后把备份的数据导回去就行:

  • 运行命令:
    python manage.py loaddata data.json
    
    loaddata会自动识别JSON文件里的模型数据,把它们导入到对应的数据库表中。如果导入时遇到外键关联的错误,可以检查一下导出时有没有加--natural-foreign参数,或者确认导入的模型顺序是否合理(不过loaddata一般会自动处理关联依赖)。

重要注意事项

  • 一定要备份! 操作前最好备份整个数据库和项目文件,万一出问题还能回滚。
  • 如果你用了第三方app,也要确保它们的migrations也被正确清理,大部分第三方app按上面的流程处理就没问题,但少数特殊的可能需要参考它们的文档。
  • 导出数据时,仔细检查--exclude的内容,别把需要的业务模型排除掉了。

内容的提问来源于stack exchange,提问作者Philip Mutua

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:20:38