S Session
to opravdu nemůžete udělat z venku. Session
musel by to vnitřně podporovat. To by znamenalo ušetřit spoustu soukromého státu, takže to nemusí stát za váš čas.
Úplně jsem zavrhl většinu věcí ORM ve prospěch rozhraní SQLAlchemy Core nižší úrovně. Pomocí tohoto (nebo dokonce jakéhokoli rozhraní dbapi) můžete triviálně používat svůj retry_on_deadlock_decorator
dekoratér (viz otázka výše) k vytvoření nového souboru db.execute
obal.
@retry_on_deadlock_decorator
def deadlock_safe_execute(db, stmt, *args, **kw):
return db.execute(stmt, *args, **kw)
A místo
db.execute("UPDATE users SET active=0")
ty ano
deadlock_safe_execute(db, "UPDATE users SET active=0")
který se automaticky zopakuje, pokud dojde k uváznutí.