【发布时间】:2023-04-11 03:48:02
【问题描述】:
假设我有一个 python 字典,其中键是现有的用户 ID,值是要添加到这些用户现有分数的分数。
例如:{1: 1580, 4: 540, 2: 678}(这可以延伸到n k,v 对)
我需要更新所有这些用户对象的分数(updated_score = original_score + new_score)。一种方法是迭代,如下所示:
from django.db.models import F
scores = {1: 1580, 4: 540, 2: 678}
for user_id,score_to_add in scores.iteritems():
UserProfile.objects.filter(user_id=user_id).update(score=F('score')+score_to_add)
但这是多个数据库调用。我可以在一个电话中完成吗?一个说明性的例子会很棒。如您所料,这是针对 Django 项目的。
【问题讨论】:
-
从未使用过,但 django-bulk-update 可能有帮助? github.com/aykut/django-bulk-update
-
我认为这是不可行的,因为您需要在每一行中使用不同的值。正如@DA--所说,您应该使用这个包或将
for循环包装在transaction.atomic()上下文中。
标签: django django-orm