Python pyodbc';s超时不';我不能在Windows上工作

Python pyodbc';s超时不';我不能在Windows上工作,python,pyodbc,Python,Pyodbc,我的代码: 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()

我的代码:

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()
超时参数将被忽略,查询将运行完成所需的时间(几分钟)

这和他遇到的问题是一样的,但对他有效的解决方案对我不起作用。现在,与他不同,我在Windows上(客户端和服务器都是Windows机器)。我知道这在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
导入时间
导入pyodbc
def getMSSQLdata(光标):
connection=pyodbc.connect(“驱动程序={SQL Server};服务器=MYSERVER;数据库=mydatabase;可信的连接=yes”)
cursor=connection.cursor()
结果=[]
t0=时间。时间()
尽管如此:
如果(time.time()-t0)<30:
next=cursor.fetchone()
如果下一步:
results.append(下一步)
其他:
打印“以{}秒执行的查询”。格式(time.time()-t0)
返回结果
其他:
打印“中止-查询时间超过30秒”
返回None#或引发一些异常
当然,您可以将其修改为在超过特定行数(而不是特定时间)后中止。或者只返回在前30秒内检索到的任何行。等等


(但这并不漂亮,也不精确。我希望能弄清楚为什么pyodbc的超时参数在Windows中被忽略。)

我知道这是一个老问题,但我只是在pyodbc中遇到了同样的问题,并且已经解决了为什么它不起作用

基本上,查询超时可以工作,但对.fetchall()不起作用

结果如下:

0.09884047508239746
0.2534453868865967
3.447007894515991
请输入并提供意外执行的代码。
0.09884047508239746
0.2534453868865967
3.447007894515991