Mit der Session
ist das nicht wirklich möglich von außen. Session
müsste dies intern unterstützen. Es würde bedeuten, dass viel privater Zustand eingespart wird, also ist dies Ihre Zeit möglicherweise nicht wert.
Ich habe das meiste ORM-Zeug zugunsten der SQLAlchemy-Core-Schnittstelle der unteren Ebene vollständig aufgegeben. Mit dieser (oder sogar jeder anderen dbapi-Schnittstelle) können Sie ganz einfach Ihren retry_on_deadlock_decorator
verwenden decorator (siehe obige Frage), um eine wiederholungsfähige db.execute
zu erstellen Verpackung.
@retry_on_deadlock_decorator
def deadlock_safe_execute(db, stmt, *args, **kw):
return db.execute(stmt, *args, **kw)
Und statt
db.execute("UPDATE users SET active=0")
du tust
deadlock_safe_execute(db, "UPDATE users SET active=0")
die es automatisch erneut versucht, wenn ein Deadlock auftritt.