比方說,我有http://stardict.sourceforge.net/Dictionaries.php下載與電子郵件和生日列表:途徑在Django
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知道這是很好的做法,但。什麼是表達我想要做的最Python的方式?
所有這些電子郵件ID是否已經存在於數據庫中?在'People'表中可以有多個條目用於相同的電子郵件ID? – AKS
我想這是檢查更新的好習慣,但不應該有重複;這已經在插入驗證。在上面的代碼中,任何具有相同電子郵件的「人物」都會得到相同的生日。 – Escher
爲了更好的代碼,你可以在transaction.atomic():'for for循環之外寫'。 – AKS