Postgresql がシリアル化の失敗のためにトランザクションをロールバックすると、DBAPIError の形で SQL Alchemy にバブルアップします (新しいバージョンでは代わりに OperationalError が発生すると思います)。しかし、問題がシリアル化可能性 (トランザクションを再試行できる場合) なのか、それとも別の問題 (ユーザーにエラーを表示したい場合) なのかを知りたいです。
例外をキャッチして、その文字列表現を読み取ることができました。
try:
... # Statement causing a serialization failure
except DBAPIError as e:
if str(e).find("could not serialize access due to read/write dependencies among transactions") >= 0:
# Retry
else:
# Report error
しかし、これは堅牢ではなく、文字列をチェックするのは間違っていると思います。
より良い方法はありますか?