Python中如何实现django数据迁移工具
https://github.com/FingerLiu/django-supertube
支持字段映射和动态字段转化。 欢迎 star,issue
Python中如何实现django数据迁移工具
1 回复
在Django里,数据迁移主要用makemigrations和migrate这两个命令。
核心流程:
-
生成迁移文件:当你改了模型(比如在
models.py里新增字段),在项目根目录运行:python manage.py makemigrations这会在对应app的
migrations文件夹下生成一个.py文件,里面记录了模型的变化。 -
执行迁移:生成文件后,运行:
python manage.py migrate这个命令会按顺序执行所有还没应用到数据库的迁移文件,真正修改数据库结构。
关键操作和代码示例:
-
查看迁移计划:在真正执行
migrate前,可以用--plan或--sqlmigrate看看它会做什么:python manage.py migrate --plan python manage.py sqlmigrate your_app_name 0001_initial # 查看某个迁移文件对应的SQL -
指定App或迁移:可以只针对特定app操作,或者回退到某个版本:
python manage.py makemigrations your_app_name python manage.py migrate your_app_name 0002 # 迁移到0002这个特定版本 -
处理迁移冲突:如果多人开发出现迁移文件编号冲突,可以用
--merge:python manage.py makemigrations --merge -
自定义数据迁移:如果需要迁移数据(不仅仅是改结构),可以创建一个空的数据迁移文件,然后在里面写
Python代码:python manage.py makemigrations your_app_name --empty生成文件后,编辑它,在
operations列表里使用RunPython,例如把一个字段的值复制到另一个字段:# 在生成的迁移文件中 from django.db import migrations def copy_data(apps, schema_editor): YourModel = apps.get_model('your_app_name', 'YourModel') for obj in YourModel.objects.all(): obj.new_field = obj.old_field obj.save() class Migration(migrations.Migration): dependencies = [...] operations = [ migrations.RunPython(copy_data), ]
总结:用makemigrations生成变更记录,用migrate应用到数据库。

