数据迁移的艺术:用Django迁移脚本安全重构生产数据库
重点讲解数据迁移(Data Migration)的高级模式:零停机重命名字段、大表分批迁移、逆向迁移回滚、跨数据库后端的兼容性处理。结合RunPython和atomic块,确保迁移可重入且不影响线上服务。 · 难度:入门 · +10XP
数据迁移的艺术:用Django迁移脚本安全重构生产数据库
本教程专注于生产环境下的数据迁移挑战。你将学到如何编写可逆的RunPython迁移,使用apps.get_model获取历史模型状态;利用batch_size和iterator()分批处理千万级数据;通过添加db_index=False临时避免索引阻塞;以及如何将字段重命名拆分为三个迁移(新增→双写→删除)保证前端不停服。
def forwards(apps, schema_editor):
MyModel = apps.get_model('myapp', 'MyModel')
for obj in MyModel.objects.iterator(chunk_size=500):
obj.new_field = obj.old_field
obj.save(update_fields=['new_field'])
def backwards(apps, schema_editor):
# 反向逻辑 ...
class Migration(migrations.Migration):
operations = [
migrations.RunPython(forwards, backwards, atomic=True),
]