2
對於唯一約束和外鍵違規違規,SQLAlchemy引發了IntegrityError
。我怎樣才能把這個包裝在try/except
區塊中並區分異常的各種原因?我想知道違規發生在哪一列,以及它是否是唯一或Foriegn密鑰違規。SQLAlchemy - 嘗試除了不同的完整性錯誤
以此課程爲例。
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String, unique=True)
org_id = db.column(db.Integer, db.ForeignKey('company_id')
可能導致以下兩種不同的消息中的一個:
- 如果
name
不是唯一的,所述消息是(x.IntegrityError)柱名稱不是唯一 - 如果
org_id
是不是唯一的,消息是(x.IntegrityError)外鍵約束失敗
我想我可以解析出「唯一」和在第第一種情況。在第二種情況下,我可以解析出「外鍵」,但我無法獲得列名。如果表上有多個外鍵,那麼如何判斷違規發生的位置,而不必對每個父表進行另一次調用?
user = User(name='Matthew Moisen', org_id=999)
db.session.add(user)
try:
db.session.commit()
except IntegrityError as ex:
# This gives either:
# (x.IntegrityError) column name is not unique
# (x.IntegrityError) foreign key constraint failed
logger.exception(ex.message)
它取決於後端。如果您檢查'ex.orig',則可以查看原始DBAPI錯誤,該錯誤可能包含受影響的列,具體取決於後端。 – univerio