假设我有一封包含电子邮件和生日的字典列表:
p = [\
{'email': '[email protected]', 'birthday': '1990-01-01'},
{'email': '[email protected]', 'birthday': '1980-02-05'},
#...etc
]
我想更新People
数据库中的对象。原始sql通常具有和一样多的查询len(p)
,所以这让我想到了:
from django.db import IntegrityError, transaction
for person in p:
try:
with transaction.atomic():
People.objects.filter(email=person['email']).update(birthday=person['birthday'])
except IntegrityError:
#handle the exception
我对Django的经验不足,但是不知道这是否是一个好习惯。表达我要做什么的最pythonic方法是什么?
过滤和更新时,相同的更新将应用于所有过滤的条目。Django不提供批量更新操作,您可以在其中对不同条目更新不同的值。
您可以通过for
在transaction.atomic()
块内包含循环,而不是在for循环中为每个条目使用原子块来使代码更好:
with transaction.atomic():
for person in p:
try:
People.objects.filter(email=person['email']).update(birthday=person['birthday'])
except IntegrityError:
#handle the exception
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句