gpt4 book ai didi

python - pyodbc 的超时在 Windows 上不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 05:51:37 24 4
gpt4 key购买 nike

我的代码:

import pyodbc

connection = pyodbc.connect("DRIVER={SQL Server};SERVER=MYSERVER;DATABASE=mydatabase;Trusted_Connection=yes")
connection.timeout = 3
cursor = connection.cursor()
results = cursor.execute("SELECT * FROM someLongTable").fetchall()

超时参数将被忽略,查询会一直运行到完成所需的时间(几分钟)。

this guy也是同样的问题有,但对他有用的解决方案对我不起作用。现在,与他不同,我在 Windows 上(客户端和服务器都是 Windows 机器)。我知道signal在 Windows 上运行不佳,有时人们使用信号来编写超时函数,所以 Windows 可能是这里的问题?可能是这样吗?如果是这样,是否有任何解决方法?

(Python 2.7.9、pyodbc 3.0.7、Windows Server 2012、MSSQL 2012)

最佳答案

我找到了一个解决方法:一个一个地检索结果,计算总耗时,如果超过 ~30 秒就放弃。

import time
import pyodbc

def getMSSQLdata(cursor):
connection = pyodbc.connect("DRIVER={SQL Server};SERVER=MYSERVER;DATABASE=mydatabase;Trusted_Connection=yes")
cursor = connection.cursor()
results = []
t0 = time.time()
while True:
if (time.time() - t0) < 30:
next = cursor.fetchone()
if next:
results.append(next)
else:
print "query executed in {} seconds".format(time.time() - t0)
return results
else:
print "aborted - query took longer than 30 seconds"
return None # or raise some exception

当然你可以修改它在超过一定行数(而不是一定时间)后中止。或者只返回前 ~30 秒内检索到的任何行。等等。

(虽然它不漂亮 - 而且不精确。我希望我能弄清楚为什么 pyodbc 的超时参数在 Windows 中被忽略。)

关于python - pyodbc 的超时在 Windows 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29975111/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com