Realmente no puedes hacer eso con la Session
desde fuera. Session
Tendría que apoyar esto internamente. Implicaría ahorrar una gran cantidad de estado privado, por lo que es posible que no valga la pena.
Abandoné por completo la mayoría de las cosas de ORM a favor de la interfaz SQLAlchemy Core de nivel inferior. Usando eso (o incluso cualquier interfaz dbapi) puede usar trivialmente su retry_on_deadlock_decorator
decorador (vea la pregunta anterior) para hacer un db.execute
con reconocimiento de reintento envoltorio.
@retry_on_deadlock_decorator
def deadlock_safe_execute(db, stmt, *args, **kw):
return db.execute(stmt, *args, **kw)
Y en lugar de
db.execute("UPDATE users SET active=0")
lo haces
deadlock_safe_execute(db, "UPDATE users SET active=0")
que volverá a intentarlo automáticamente si ocurre un interbloqueo.