Du kan ikke rigtig gøre det med Session
udefra. Session
skulle understøtte dette internt. Det ville indebære at spare en masse privat stat, så det er måske ikke tiden værd.
Jeg droppede fuldstændigt de fleste ORM-ting til fordel for SQLAlchemy Core-grænsefladen på lavere niveau. Ved at bruge den (eller endda en hvilken som helst dbapi-grænseflade) kan du trivielt bruge din retry_on_deadlock_decorator
decorator (se spørgsmål ovenfor) for at lave en genforsøgsbevidst db.execute
indpakning.
@retry_on_deadlock_decorator
def deadlock_safe_execute(db, stmt, *args, **kw):
return db.execute(stmt, *args, **kw)
Og i stedet for
db.execute("UPDATE users SET active=0")
du gør
deadlock_safe_execute(db, "UPDATE users SET active=0")
som vil prøve igen automatisk, hvis der opstår en dødvande.