8

実際に機能する初期接続のタイムアウトを設定する文書化された方法を見つけることができませんでした。「クエリのタイムアウト」について尋ねているのではなく、DB サーバーが完全にダウンしているか到達不能であり、応答がまったくない場合の初期接続試行のタイムアウトです。デフォルトでは、このような接続は 255 秒後にタイムアウトするように見えます。より短いタイムアウトを設定する方法はありますか?

編集:明確にするために、ここでスタックを繰り返す必要があります:

  • パイソン
  • pyodbc
  • unixODBC (iODBC ではない)
  • MS ODBC Driver 11 for SQL Server (FreeTDS ではない)
  • Linux
4

1 に答える 1

5

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 秒以内に結果が返されませんでした。ただし、タイムアウトが設定されていない場合よりもはるかに高速に結果が返されました。

于 2015-08-05T05:00:29.043 に答える