我有這樣的代碼:IntegrityError:唯一約束和NOT NULL違規區分
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
)
它試圖創建一個用戶給定的ID和電子郵件,如果已經存在一個 - 試圖讓現有的記錄。
我知道這是一個糟糕的構造,無論如何它都會被重構。但我的問題是這樣的:
我如何確定什麼樣的IntegrityError
已經發生了:一個有關unique
違反約束(有上(USER_ID,電子郵件)唯一鍵)或一個相關not null
約束(path
不能爲空)?
如果有人發現這種情況:get_or_create()更清晰,但仍然不總是原子的,並且遭受競爭條件(取決於數據庫配置),正如文檔中指出的那樣。 – Bartvds