2
SQLAlchemyは、ユニーク制約違反と外部キー制約違反の両方に対してIntegrityError
を発生させます。 try/except
ブロックでこれを包み込み、例外のさまざまな原因を区別するにはどうすればよいですか?私は違反が発生した列と、それがUniqueキーかForiegn Key違反かどうかを知りたい。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')
以下は、2つの異なるメッセージの1つをもたらし得る:
name
が一意でない場合、メッセージは、(x.IntegrityError)でorg_id
場合列名は、- 一意ではありませんがユニークでない場合、メッセージは(x.IntegrityError)外部キー制約が失敗した
私は "ユニーク" e第1の場合。後者の場合、「外部キー」を解析できますが、列名を取得できませんでした。テーブルに複数の外部キーがある場合、各親テーブルへの別の呼び出しを行わずにどのような違反が発生したかをどのように伝えることができますか?
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