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

mim*_*imo 10 django django-database

我正在编写一个迁移,要求我用另一个字段(具有相同类型和约束)的现有数据填充字段.Django可以在一次操作中复制数据吗?当我需要复制数据时,目标列已存在.

在SQL中,我会写这样的东西:

UPDATE my_table SET column_b = column_a;
Run Code Online (Sandbox Code Playgroud)

编辑

当前的答案建议循环遍历模型实例,但这是我想要避免的.可以没有循环吗?

Raf*_*arb 17

正如评论所提到的,您可以简单地为此编写迁移.我认为虽然我没有测试过,但下面应该可行.它使用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():
    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(copy_field),
    ]
Run Code Online (Sandbox Code Playgroud)

  • 小更新。`copy_field` 需要两个显式参数,因此它更多:`def copy_field(app, schema):` :) (2认同)