Не можете да направите това с Session
отвън. Session
ще трябва да подкрепят това вътрешно. Това ще включва спестяване на много частно състояние, така че това може да не си струва времето ви.
Напълно зарязах повечето ORM неща в полза на интерфейса SQLAlchemy Core от по-ниско ниво. Използвайки този (или дори всеки dbapi интерфейс) можете да използвате тривиално своя retry_on_deadlock_decorator
декоратор (вижте въпроса по-горе), за да направите следящ за повторен опит db.execute
обвивка.
@retry_on_deadlock_decorator
def deadlock_safe_execute(db, stmt, *args, **kw):
return db.execute(stmt, *args, **kw)
И вместо
db.execute("UPDATE users SET active=0")
ти го правиш
deadlock_safe_execute(db, "UPDATE users SET active=0")
който ще се опита отново автоматично, ако възникне задънена улица.