Sagen wir, ich habe eine Liste von dicts mit E-Mails und Geburtstage:Weg zur Massenaktualisierung (mit eindeutigen Werten) in Django
p = [\
{'email': '[email protected]', 'birthday': '1990-01-01'},
{'email': '[email protected]', 'birthday': '1980-02-05'},
#...etc
]
Ich möchte die People
Objekte in der Datenbank aktualisieren. Die rohe SQL würde normalerweise so viele Anfragen wie len(p)
, so das macht mich denken, tun:
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
Ich bin nicht genug in Django erfahren zu wissen, ob dies eine gute Praxis ist aber. Was ist die pythischste Art auszudrücken, was ich versuche zu tun?
Sind alle diese E-Mail-IDs bereits in der Datenbank vorhanden? Könnte es mehrere Einträge in der Tabelle "Personen" für dieselbe E-Mail-ID geben? – AKS
Ich denke, es wäre eine gute Übung, das Update zu überprüfen, aber es sollte keine Duplikate geben. Dies ist bereits beim Einfügen bestätigt. Im obigen Code erhalten alle Personen, die dieselbe E-Mail-Adresse haben, denselben Geburtstag. – Escher
Für besseren Code könnten Sie 'mit transaction.atomic():' außerhalb Ihrer for-Schleife schreiben. – AKS