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

How to set a DB connection timeout for a python/pyodbc/unixODBC/MS ODBC Driver 11 for SQL Server/Linux stack?

我一直找不到一个文档化的方法来设置实际工作的初始连接的超时。我不是在问"查询超时",而是在DB服务器完全关闭或无法访问并且根本没有响应的情况下,初始连接尝试的超时。默认情况下,这样的连接在255秒后会超时-有没有方法设置一个较短的超时?

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

  • Python
  • 脓毒症
  • unixodc(非iodbc)
  • 用于SQL Server的MS ODBC驱动程序11(非Freetds)
  • Linux


https://stackoverflow.com/a/12946908/1552953

此答案表示能够在连接上设置超时:

Timeout

An optional integer query timeout, in seconds. Use zero, the
default, to disable.

The timeout is applied to all cursors created by the connection, so it
cannot be changed for a given connection.

If a query timeout occurs, the database should raise an
OperationalError with SQLSTATE HYT00 or HYT01.

Note: This attribute only affects queries. To set the timeout for the
actual connection process, use the timeout keyword of the
pyodbc.connect function.

1
2
3
4
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秒内没有返回结果。但它返回结果的速度比没有设置超时要快得多。