Ich habe eine Django-Anwendung, die Daten von einer Web-API liest und in eine Datenbank stellt.
Gibt es eine Möglichkeit, ein neues Objekt aus einem Modus zu erstellen, aber die doppelte Ausnahme zu verhindern, wenn das Objekt bereits vorhanden ist?
Mit anderen Worten, gibt es eine Möglichkeit, ein Objekt zu speichern, aber nichts zu tun, wenn es bereits vorhanden ist?
IntegrityError
dass die aktuelle Transaktion abgebrochen wird und nicht ausreicht.transaction.atomic
(stellen Sie sicher, dass Sie außerhalb desatomic
Blocks abfangen , dhtry: with acomic: create; except IntegrityError
es ist auch schwierig sicherzustellen, dass Sie keine anderen Integritätsfehler als den beabsichtigten abfangenIntegrityError
, zeigen meine Tests, dass es die Ausführungszeit fast halbiert, wenn der Datensatz im Vergleich zu existiertget_or_create()
.In Django 1.7 können Sie außerdem Folgendes tun:
Model.objects.update_or_create()
quelle
In neueren Versionen von Django führt die Funktion save () standardmäßig ein UPDATE oder INSERT durch. Siehe hier .
quelle