Je kunt dat niet echt doen met de Session
van de buitenkant. Session
zou dit intern moeten ondersteunen. Het zou veel privé-staat besparen, dus dit is misschien niet de moeite waard.
Ik heb de meeste ORM-dingen volledig gedumpt ten gunste van de SQLAlchemy Core-interface op een lager niveau. Met die (of zelfs een dbapi-interface) kun je triviaal je retry_on_deadlock_decorator
gebruiken decorateur (zie vraag hierboven) om een retry-aware db.execute
. te maken omslag.
@retry_on_deadlock_decorator
def deadlock_safe_execute(db, stmt, *args, **kw):
return db.execute(stmt, *args, **kw)
En in plaats van
db.execute("UPDATE users SET active=0")
jij wel
deadlock_safe_execute(db, "UPDATE users SET active=0")
die automatisch opnieuw zal proberen als er een impasse optreedt.