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