Bạn thực sự không thể làm điều đó với Session
từ bên ngoài. Session
sẽ phải hỗ trợ điều này trong nội bộ. Nó sẽ liên quan đến việc tiết kiệm rất nhiều trạng thái riêng tư, vì vậy điều này có thể không đáng để bạn mất thời gian.
Tôi đã loại bỏ hoàn toàn hầu hết các công cụ ORM để chuyển sang giao diện SQLAlchemy Core cấp thấp hơn. Bằng cách sử dụng đó (hoặc thậm chí bất kỳ giao diện dbapi nào), bạn có thể sử dụng retry_on_deadlock_decorator
một cách dễ dàng người trang trí (xem câu hỏi ở trên) để thử nhận biết lại db.execute
trình bao bọc.
@retry_on_deadlock_decorator
def deadlock_safe_execute(db, stmt, *args, **kw):
return db.execute(stmt, *args, **kw)
Và thay vì
db.execute("UPDATE users SET active=0")
bạn làm gì
deadlock_safe_execute(db, "UPDATE users SET active=0")
sẽ tự động thử lại nếu xảy ra bế tắc.