我一直无法找到有记录的方法来为实际有效的初始连接设置超时。我不是在询问“查询超时”,而是在数据库服务器完全关闭或无法访问的情况下初始连接尝试超时,并且根本没有响应。默认情况下,此类连接似乎在 255 秒后超时 - 有没有办法设置更短的超时?
编辑:为清楚起见,我应该在这里重申堆栈:
- Python
- pyodbc
- unixODBC(不是 iODBC)
- 适用于 SQL Server(非 FreeTDS)的 MS ODBC 驱动程序 11
- Linux
我一直无法找到有记录的方法来为实际有效的初始连接设置超时。我不是在询问“查询超时”,而是在数据库服务器完全关闭或无法访问的情况下初始连接尝试超时,并且根本没有响应。默认情况下,此类连接似乎在 255 秒后超时 - 有没有办法设置更短的超时?
编辑:为清楚起见,我应该在这里重申堆栈:
https://stackoverflow.com/a/12946908/1552953
这个答案是指能够在连接上设置超时:
暂停
可选整数查询超时,以秒为单位。使用零(默认值)禁用。
超时适用于连接创建的所有游标,因此对于给定连接无法更改。
如果发生查询超时,数据库应使用 SQLSTATE HYT00 或 HYT01 引发 OperationalError。
注意:此属性仅影响查询。要为实际连接过程设置超时,请使用 pyodbc.connect 函数的 timeout 关键字。
result = None
with pyodbc.connect('DRIVER={SQL Server};SERVER=mydb;DATABASE=solarwinds;Trusted_Connection=True', timeout=1) as cnxn:
cursor = cnxn.cursor()
result = cursor.execute(query).fetchall()
所以使用上面的代码它没有在 1 秒内超时,或者至少它没有在 1 秒内返回结果。但它确实比没有设置超时更快地返回结果。