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,
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')
pyodbc.OperationalError: ('HYT00', '[HYT00] [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired (0) (SQLDriverConnect)')
Process finished with exit code 1
找出报错原因
关闭防火墙
控制面板\系统和安全\Windows Defender 防火墙\自定义设置
关闭防火墙可成功连接。
得出结论
SQL Server TCP连接端口没有开放。
解决方法
Windows
-
打开SQL Server 配置管理器(SQL Server Configuration Manager),按图示查看SQL Server TCP端口号。
-
进入
控制面板\系统和安全\Windows Defender 防火墙
,点击高级设置
。 -
在
高级设置
中,点击入站规则
,然后点击新建规则
。 -
新建规则
中,要创建的规则类型选择端口(O)
。 -
下一步选择
TCP
和特定本地端口
,特定本地端口
就是SQL Server 配置管理器中找到的端口号。 -
下一步选择
允许连接
。 -
下一步何时应用该规则,默认选择即可。
-
下一步填写
名称
和描述
,这一步可自定义。 -
下一步
完成
即可。