Esc*_*her 1 python django sql-update
假设我有一个包含电子邮件和生日的听写列表:
p = [\
{'email': 'someone@somewhere.com', 'birthday': '1990-01-01'},
{'email': 'someone_else@somewhereelse.com', 'birthday': '1980-02-05'},
#...etc
]
Run Code Online (Sandbox Code Playgroud)
我想更新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
Run Code Online (Sandbox Code Playgroud)
我对 Django 的经验还不够,不知道这是否是一个好的实践。表达我想做的事情最Pythonic的方式是什么?
使用 Django 的bulk_update- https://docs.djangoproject.com/en/3.1/ref/models/querysets/#bulk-update
objs = []
for person in p:
obj = People.objects.get(email=person['email'])
obj.birthday = person['birthday']
objs.append(obj)
People.objects.bulk_update(objs, ['birthday'], batch_size=1000)
Run Code Online (Sandbox Code Playgroud)