1. ホーム
  2. パイソン

[HYT00] [Microsoft] [ODBC Driver 17 for SQL Server] Login timeout expired (0) (SQLDriverConnect)

2022-02-23 05:18:18
<パス

Pyodbc [HYT00] [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired (0) (SQLDriverConnect)

pyodbc を使用して SQL Server に接続すると、タイムアウトエラーが報告されました。

コード

import pyodbc

driver = '{ODBC Driver 17 for SQL Server}'
server = '192.168.50.106,1433'
database = 'books'
username = 'sa'
password = '123456'
cnxn = pyodbc.connect(
    'DRIVER={};SERVER={};DATABASE={};UID={};PWD={}'.format(
        driver,
        server,
        server, database,
        username,
        password
    )
)

cursor = cnxn.cursor()

cursor.execute("SELECT @@version;")
row = cursor.fetchone()
while row:
    print(row[0])
    row = cursor.fetchone()

/usr/bin/python3.8 /home/wj/wj/project/test/test.py
Traceback (most recent call last):
  File "/home/wj/wj/project/test/test.py", line 10, in <module>
    cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=192.168.50.106,1433;DATABASE=books;UID=sa;PWD=123456')
OperationalError: ('HYT00', '[HYT00] [Microsoft][ODBC Driver 17 for SQL Server] Login timeout expired (0) (SQLDriverConnect)')

Process finished with exit code 1

エラーメッセージ

Control Panel\System and Security\Windows Defender Firewall

エラーが報告される理由を確認する

ファイアウォールをオフにする

Control PanelSystem and SecurityWindows Defender FirewallCustom Settings

ファイアウォールをオフにすることで、正常に接続できるようになります。

結論を導き出す

SQL Server TCP 接続ポートが開かれていません。

解決方法

ウィンドウズ

  1. SQL Server 構成マネージャを開き、SQL Server の TCP ポート番号を図のように表示します。

  2. 次のページへ Advanced Settings をクリックし Advanced Settings .

  3. Inbound Rules の中に New Rule をクリックし New rule .

  4. Port (O) 作成するルールの種類で TCP .

  5. 次の選択項目 specific local port Specific local port を使用します。 Allow connections は、SQL Server Configuration Manager で見つかるポート番号です。

  6. 次の選択項目 Name .

  7. 次のステップでルールを適用する場合、デフォルトで選択するだけです。

  8. 次のステップでは Description Finish で、このステップでカスタマイズ可能です。

  9. 次のステップ Finish で完了です。