在Django中将数据库列复制到另一列

ibrsph3r  于 2022-11-26  发布在  Go
关注(0)|答案(1)|浏览(106)

我正在写一个迁移,它要求我用另一个字段的现有数据填充一个字段(具有相同的类型和约束)。在Django中是否可以在一个操作中复制数据?当我需要复制数据时,目标列已经存在。
在SQL中,我会写这样的内容:

UPDATE my_table SET column_b = column_a;

编辑

目前的答案建议在模型示例上循环,但这正是我想避免的。没有循环能做到吗?

0lvr5msh

0lvr5msh1#

正如评论中提到的,您可以简单地为此编写一个迁移。我认为下面的方法应该可以工作,虽然我还没有测试它。它使用queryset update API和F来避免循环

from __future__ import unicode_literals

from django.apps import apps
from django.db import migrations, models
from django.db.models import F

def copy_field(apps, schema):
    MyModel = apps.get_model('<your app>', 'MyModel')
    MyModel.objects.all().update(column_a=F('column_b'))

class Migration(migrations.Migration):
    dependencies = [
        ('<your app>', '<previous migration>'),
    ]

    operations = [
        migrations.RunPython(code=copy_field),
    ]

相关问题