Vous ne pouvez pas vraiment faire cela avec la Session
de l'exterieur. Session
devrait soutenir cela en interne. Cela impliquerait d'économiser beaucoup d'état privé, donc cela ne vaut peut-être pas la peine.
J'ai complètement abandonné la plupart des éléments ORM au profit de l'interface SQLAlchemy Core de niveau inférieur. En utilisant cela (ou même n'importe quelle interface dbapi), vous pouvez utiliser trivialement votre retry_on_deadlock_decorator
décorateur (voir la question ci-dessus) pour créer un db.execute
sensible aux nouvelles tentatives emballage.
@retry_on_deadlock_decorator
def deadlock_safe_execute(db, stmt, *args, **kw):
return db.execute(stmt, *args, **kw)
Et au lieu de
db.execute("UPDATE users SET active=0")
vous faites
deadlock_safe_execute(db, "UPDATE users SET active=0")
qui réessayera automatiquement si un blocage se produit.