25

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

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

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

「args」、「connection_invalidated」、「instance」、「message」、「orig」、「params」、「statement」

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

誰でもこの問題に光を当てることができますか?

4

2 に答える 2

44

ドキュメントをより注意深く読んで、質問を書いているときにこれを理解しました。どなたかの参考になるかもしれないので投稿しておきます。

IntegrityErrorがサブクラス化された SQLAlchemy DBAPIErrorのドキュメントでは、例外は基礎となるデータベース API エラーの単なるラッパーであり、元のエラーは例外として保存されることが説明されています。案の定、うまく整理されたタプルを取得できます。orige.orig.args

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

于 2012-07-26T04:13:34.320 に答える