Làm việc với con trỏ trong mysql-python Tôi thường gọi "BEGIN;", "COMMIT;" và "ROLLBACK;" một cách rõ ràng như sau:Tại sao kết nối trong DB-API của Python không có hoạt động "bắt đầu"?
try:
cursor.execute("BEGIN;")
# some statements
cursor.execute("COMMIT;")
except:
cursor.execute("ROLLBACK;")
sau đó, tôi phát hiện ra rằng đối tượng kết nối cơ bản có những phương pháp tương ứng:
try:
cursor.connection.begin()
# some statements
cursor.connection.commit()
except:
cursor.connection.rollback()
Kiểm tra DB-API PEP tôi phát hiện ra rằng nó không đề cập đến phương pháp bắt đầu() cho đối tượng kết nối, ngay cả đối với các phần mở rộng.
Mysql-python, bằng cách này, ném DeprecationWarning, khi bạn sử dụng phương pháp. sqlite3.connection, ví dụ, không có phương pháp nào cả.
Và câu hỏi đặt ra là tại sao không có phương pháp như vậy trong PEP? Câu lệnh này có phải là tùy chọn không, có đủ để gọi commit() không?
Cảm ơn bạn đã liên kết hữu ích cho câu hỏi lân cận. Đây không phải là câu trả lời cho câu hỏi của tôi nhưng nó làm sáng tỏ một số lý do có thể. – newtover
@newtower: Bạn nói đúng, tôi đã nghi ngờ trả lời hoặc chỉ đăng một bình luận nhưng làm như vậy tôi có thể đăng bài nhỏ đó. –
Bằng cách này, mặc dù gói kết nối với một trình quản lý ngữ cảnh là hữu ích, tôi thích sử dụng lại kết nối trong các truy vấn liền kề, nhưng các lớp con trỏ không thực hiện giao diện contextmanager, ngay cả trong trăn 2.6. – newtover