LinuxでFreeTDSを使用してpyodbcを使用してSQLServer2005に接続しています。接続のタイムアウト引数が、クエリによって受け入れられていないことに気付きました。
以下を実行すると、両方のcursor.execute呼び出しの後にタイムアウトエラーが発生することが予想されます。
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'
代わりに、この出力を取得します。最初のdbクエリが7.5秒以上かかり、2番目の呼び出しがタイムアウトをスローせずに30秒かかっていることを示します。
(808432.0, )
7.56196093559
OK
pyodbcとSQLServerを使用してクエリのタイムアウトを強制するより良い方法はありますか?