Du kan inte riktigt göra det med Session
från utsidan. Session
skulle behöva stödja detta internt. Det skulle innebära att spara en hel del privat tillstånd, så det här kanske inte är värt din tid.
Jag lade helt bort de flesta ORM-grejer till förmån för SQLAlchemy Core-gränssnittet på lägre nivå. Genom att använda det (eller till och med vilket dbapi-gränssnitt som helst) kan du trivialt använda din retry_on_deadlock_decorator
decorator (se frågan ovan) för att göra en försöksmedveten db.execute
omslag.
@retry_on_deadlock_decorator
def deadlock_safe_execute(db, stmt, *args, **kw):
return db.execute(stmt, *args, **kw)
Och istället för
db.execute("UPDATE users SET active=0")
du gör
deadlock_safe_execute(db, "UPDATE users SET active=0")
som kommer att försöka igen automatiskt om ett dödläge inträffar.