Tôi đang sử dụng pyodbc trên Linux với FreeTDS để kết nối với SQL Server 2005. Tôi đã nhận thấy rằng đối số hết thời gian cho kết nối của tôi không được đáp ứng bởi các truy vấn của tôi.đối số timeout pyodbc.connect bị bỏ qua cho các cuộc gọi đến SQL Server
Khi tôi chạy như sau, tôi mong đợi sẽ thấy các lỗi hết thời gian chờ sau cả hai cuộc gọi.
import pyodbc
import time
connString = 'SERVER=dbserver;PORT=1433;DATABASE=db;UID=dbuser;PWD=dbpwd;' + \
'DRIVER=FreeTDS'
cnxn = pyodbc.connect(connString , timeout=3)
cursor = cnxn.cursor()
t1 = time.time()
cursor.execute("SELECT MAX(Qty) FROM big_table WHERE ID<10000005")
print cursor.fetchone()
t2 = time.time()
print t2-t1
cursor.execute("WAITFOR DELAY '00:00:30'")
print 'OK'
Thay vào đó, tôi nhận được kết quả này. Chỉ ra rằng truy vấn db đầu tiên mất hơn 7,5 giây và cuộc gọi thứ hai mất 30 giây mà không cần phải hết thời gian chờ.
(808432.0,)
7.56196093559
OK
Có cách nào tốt hơn để buộc thời gian chờ truy vấn bằng pyodbc và SQL Server không?
Trong khi tôi chấp nhận câu trả lời của cravori theo quyền ưu tiên, bạn đưa ra giải pháp tương tự với giải thích chi tiết hơn. Cảm ơn vì điều đó. – ChrisGuest
@ChrisGuest Đã hiểu. Biến 'timeout' là thông tin mới của tôi, và nó không rõ ràng với tôi về những gì cần phải làm để tận dụng nó. Hy vọng rằng điều này sẽ giúp những người chạy qua nó và dày đặc như tôi :-) – Bryan