Session
では実際にそれを行うことはできません 外部から。 Session
これを内部でサポートする必要があります。それは多くの私的な状態を保存することを含むでしょう、それでこれはあなたの時間の価値がないかもしれません。
私はほとんどのORMを完全に捨てて、低レベルのSQLAlchemyCoreインターフェイスを採用しました。それ(または任意のdbapiインターフェース)を使用すると、retry_on_deadlock_decorator
を簡単に使用できます。 再試行を意識したdb.execute
を作成するためのデコレータ(上記の質問を参照) ラッパー。
@retry_on_deadlock_decorator
def deadlock_safe_execute(db, stmt, *args, **kw):
return db.execute(stmt, *args, **kw)
そして代わりに
db.execute("UPDATE users SET active=0")
あなたは
deadlock_safe_execute(db, "UPDATE users SET active=0")
デッドロックが発生した場合は自動的に再試行します。