SQLAlchemy エラー処理 - どのように行われますか? 質問する

SQLAlchemy エラー処理 - どのように行われますか? 質問する

主キーまたは一意キーの競合、つまり重複エントリがあるケースを処理したいです。このために、 をキャッチしています。IntegrityErrorこれでエラーは問題なくキャッチされます。問題は、確認すべき簡単なエラー メッセージやエラー コードが見つからないことです。取得できるのは、IntegrityError.message次のような文字列である プロパティだけです。

(IntegrityError) (1062、「キー 'name' のエントリ 'foobar' が重複しています」)

これはあまり役に立ちません。これを使用すると、エラー メッセージのコードとメッセージを解析する必要があります。dir例外を呼び出すと、次のプロパティのみが表示されます。

'args'、'connection_invalidated'、'instance'、'message'、'orig'、'params'、'statement'

argsは、前述の文字列が含まれた単一の項目のタプルであり、params挿入しようとしたデータです。正規表現などを使用してエラー メッセージを解析しない限り、これが実際に重複キー エラーであるかどうかを判断する方法が見つからないようです。

この問題に関して誰か説明できますか?

ベストアンサー1

質問を書いているときに、ドキュメントをもっと注意深く読んで、このことを理解しました。それでも、誰かの役に立つかもしれないので、これを投稿します。

SQLAlchemyのドキュメントではDBAPIエラー、そこから整合性エラーサブクラス化されているので、例外は基礎となるデータベース API エラーのラッパーに過ぎず、元のエラーはorig例外として保存されることが説明されています。確かに、呼び出すと、e.orig.argsきれいに整理されたタプルが得られます。

(1062、「キー 'name' のエントリ 'foobar' が重複しています」)

おすすめ記事