Você realmente não pode fazer isso com a
Session
de fora. Session
teria que suportar isso internamente. Isso envolveria economizar muito estado privado, então isso pode não valer o seu tempo. Eu abandonei completamente a maioria das coisas ORM em favor da interface SQLAlchemy Core de nível inferior. Usando isso (ou mesmo qualquer interface dbapi), você pode usar trivialmente seu
retry_on_deadlock_decorator
decorador (veja a pergunta acima) para fazer um db.execute
com reconhecimento de tentativas embrulho. @retry_on_deadlock_decorator
def deadlock_safe_execute(db, stmt, *args, **kw):
return db.execute(stmt, *args, **kw)
E em vez de
db.execute("UPDATE users SET active=0")
Você faz
deadlock_safe_execute(db, "UPDATE users SET active=0")
que tentará novamente automaticamente se ocorrer um impasse.