⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

数据迁移高级模式:在已有表中安全添加非空字段

当线上数据库已有百万行数据时,如何优雅地添加一个非空字段并填充默认值,同时保证零宕机。 · 难度:入门 · +10XP

数据迁移高级模式:在已有表中安全添加非空字段

新手直接添加 non-null 字段会导致数据迁移失败或锁表。本教程教你三步法:1) 添加允许 null 的字段,2) 通过数据迁移(RunPython)填充数据,3) 改为非空。同时讲解如何利用 Django 的 migrations.RunPython 配合批量更新(update())避免内存溢出。以及如何在零停机场景下,先部署代码兼容新旧字段,再事后执行迁移。最后演示如何回滚迁移。

from django.db import migrations

def fill_slug(apps, schema_editor): Product = apps.get_model('shop', 'Product') for product in Product.objects.iterator(): product.slug = slugify(product.name) product.save(update_fields=['slug'])

class Migration(migrations.Migration): dependencies = [('shop', '0001_initial')] operations = [ migrations.AddField( model_name='product', name='slug', field=models.SlugField(null=True), ), migrations.RunPython(fill_slug), migrations.AlterField( model_name='product', name='slug', field=models.SlugField(unique=True), ), ]

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 189 篇
0 完成
🔥 0