pyodbc.connect timeout argument is ignored for calls to SQL Server
我在Linux上使用pyodbc和FreeTDS连接到SQL Server 2005.我注意到我的连接的超时参数没有被我的查询所尊重。
当我运行以下操作时,我希望在cursor.execute调用之后看到超时错误。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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秒,第二个调用占用30秒而不会超时。
1 2 3 | (808432.0, ) 7.56196093559 OK |
有没有更好的方法来强制使用pyodbc和SQL Server查询超时?
将
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import pyodbc import time connString = 'SERVER=dbserver;PORT=1433;DATABASE=db;UID=dbuser;PWD=dbpwd;' + \ 'DRIVER=FreeTDS' cnxn = pyodbc.connect(connString) cnxn.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' |
请参阅pyodbc连接,有两个单独的超时参数,Connection类上的一个变量(这会设置查询的超时)和一个pyodbc.connect的关键字参数(这个参数用于实际的连接过程)。 基于此,您将在代码中设置连接过程的超时,而不是查询。