如何为SQL Server / Linux堆栈的python / pyodbc / unixODBC / MS ODBC驱动程序11设置数据库连接超时?

我一直无法find一个logging的方式来设置实际工作的初始连接超时。 我不是在询问“查询超时”,而是在数据库服务器完全closures或无法访问的情况下进行初始连接尝试的超时,并且根本没有响应。 默认情况下,这样的连接在255秒后显示超时 – 是否有一种方法来设置更短的超时?

编辑:为了清楚起见,我应该在这里重申堆栈:

  • python
  • pyodbc
  • unixODBC(不是iODBC)
  • 用于SQL Server的MS ODBC驱动程序11(不是FreeTDS)
  • Linux的

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秒内没有返回结果。 但它确实返回的结果比没有超时设置快得多。