Ich habe diesen Code:IntegrityError: unterscheiden zwischen eindeutige Einschränkung und nicht null Verletzungen
try:
principal = cls.objects.create(
user_id=user.id,
email=user.email,
path='something'
)
except IntegrityError:
principal = cls.objects.get(
user_id=user.id,
email=user.email
)
Es wird versucht, einen Benutzer mit dem angegebenen ID und E-Mail zu erstellen, und wenn es bereits ein solches vorhanden ist - versucht, die bestehenden zu erhalten Aufzeichnung.
Ich weiß, das ist eine schlechte Konstruktion und es wird sowieso refaktoriert. Aber meine Frage ist:
Wie kann ich feststellen, welche Art von IntegrityError
passiert: die eine im Zusammenhang mit unique
Einschränkungsverletzung (es gibt eindeutige Schlüssel auf (user_id, E-Mail)) oder die zu not null
Einschränkung verwendet (path
nicht sei null)?
Wenn jemand das findet: get_or_create() ist sauberer aber immer noch nicht immer atomar und leidet unter Rennbedingungen (abhängig von Datenbankkonfiguration), wie in den Dokumenten erwähnt. – Bartvds