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

MySQLdb với nhiều giao dịch trên mỗi kết nối

Tôi nghĩ rằng có sự hiểu lầm về những gì cấu thành một giao dịch ở đây.

Ví dụ của bạn mở ra một kết nối, sau đó thực thi một giao dịch trên đó. Bạn thực hiện nhiều câu lệnh SQL trong giao dịch đó, nhưng bạn đóng nó hoàn toàn sau khi cam kết. Tất nhiên, điều đó còn tốt hơn cả.

Thực hiện nhiều giao dịch (trái ngược với chỉ các câu lệnh SQL), trông giống như sau:

conn = MySQLdb.connect(host="1.2.3.4", port=1234, user="root", passwd="x", db="test")

for j in range(10):
    try:
        for i in range(10):
            cur = conn.cursor()
            query = "DELETE FROM SomeTable WHERE ID = %d" % i
            cur.execute(query)
            cur.close()
        conn.commit()
    except Exception:
        conn.rollback()

conn.close()

Đoạn mã trên thực hiện 10 giao dịch, mỗi giao dịch bao gồm 10 câu lệnh xóa riêng lẻ.

Và có, bạn sẽ có thể sử dụng lại kết nối đang mở cho điều đó mà không gặp sự cố, miễn là bạn không chia sẻ kết nối đó giữa các luồng.

Ví dụ: SQLAlchemy tái sử dụng các kết nối bằng cách gộp chúng lại, cung cấp các kết nối mở khi cần thiết cho ứng dụng. Các giao dịch mới và các câu lệnh mới được thực hiện trên các kết nối này trong suốt thời gian tồn tại của ứng dụng mà không cần phải đóng cho đến khi ứng dụng bị tắt.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL ON UPDATE CURRENT_TIMESTAMP không cập nhật

  2. Laravel:Cách lấy bộ sưu tập hùng hồn được sắp xếp tùy chỉnh bằng phương thức whereIn

  3. Giới hạn Tải xuống Song song / Đồng thời - Làm thế nào để biết nếu quá trình tải xuống đã bị hủy?

  4. Giữa các chỉ mục bị thiếu câu lệnh trong một số trường hợp nhất định

  5. Lỗi khi tải Mô-đun MySQLdb và cài đặt pip MySQLdb