Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Thử lại khi deadlock cho MySQL / SQLAlchemy

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để chọn dữ liệu từ một bảng trong đó tên bảng có khoảng trống?

  2. Context.User là NULL trong Application_AuthenticateRequest qua windows auth trong ứng dụng Asp.net MVC

  3. Tôi không thể sử dụng bí danh trong xóa sql

  4. Chọn cha mẹ và con cái với MySQL

  5. Khởi tạo PHP PDO không thành công do cổng đôi - Không có PDOException:SQLSTATE [HY000] [2002]