django 实现批量更新数据

原理

  • 核心科技 还是 case when 无他尔
  • 但是既然使用了 orm 既然要优雅(装逼)有一点

版本 1 一条的更新 多个语句

from myapp.models import MyModel

# 更新id=1的数据
MyModel.objects.filter(id=1).update(name='test1')

# 更新id=21的数据
MyModel.objects.filter(id=21).update(name='zhangsan')

版本 2 一条的更新 一个语句

from django.db.models import Case, When
from myapp.models import MyModel

MyModel.objects.update(
    name=Case(
        When(id=1, then='test1'),
        When(id=21, then='zhangsan'),
        default='default_value'
    )
)
版本 3 一条的更新 一个语句 循环入参
from django.db.models import Case, When
from myapp.models import MyModel

 when_list = [When(uuid=sort.get('uuid'), then=int(sort.get('sort'))) for sort in sorts]
 filter_list = [sort.get('uuid') for sort in sorts]
 MyModel.objects.filter(uuid__in=filter_list).update(
          sort=Case(*when_list)
      )

posted @ 2023-10-07 14:18  vx_guanchaoguo0  阅读(400)  评论(0编辑  收藏  举报