[Microsoft][ODBC Driver 17 for SQL Server]登录超时 (0) (SQLDriverConnect)')

6

我无法使用Python从Unix连接到SQL服务器。

由于其他依赖项,我将无法像在Pyodbc: Login Timeout Error中所解释的那样,将驱动程序从ODBC Driver 17 for SQL Server替换为ODBC Driver 13 for SQL Server。

请问有没有其他替代方案?

代码:

import sqlalchemy as sa

from urllib import parse as db_parse

from sqlalchemy import event

params = db_parse.quote_plus(r"DRIVER={ODBC Driver 17 for SQL Server};SERVER='server,port';DATABASE=DB_NAME;username=USER_ID;password=PWD;Trusted_Connection=yes")

engine = sa.create_engine('mssql+pyodbc:///?odbc_connect={}'.format(params))

connection = engine.connect()

错误:

sqlalchemy.exc.OperationalError: (pyodbc.OperationalError) ('HYT00', '[HYT00] [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired (0) (SQLDriverConnect)') (Background on this error at: http://sqlalche.me/e/e3q8)

那个回答对降级没有任何帮助。ODBC版本没有问题。在那个评论中,OP缺少一个库,并选择降级而不是安装缺失的库。 - Panagiotis Kanavos
4
"Trusted_Connection=yes"表示Windows身份验证,无法在Linux上使用。您不能在同一连接字符串中同时使用它和SQL登录。实际的连接字符串是什么样子?可能会出现真正的超时错误,或者可能是由于不正确的值引起的问题。例如,SERVER='server,port'是错误的,服务器名称和端口不需要加引号。 - Panagiotis Kanavos
1个回答

3

我的连接字符串看起来不同:

"DRIVER={ODBC Driver 17 for SQL Server};SERVER=myserver;DATABASE=mydb;UID=myuser;PWD=mypassword"

会导致

import pyodbc
connection = pyodbc.connect("DRIVER={ODBC Driver 17 for SQL Server};SERVER=myserver;DATABASE=mydb;UID=myuser;PWD=mypassword", autocommit=True)

您需要使用用户名而不是UID等。 所有以“我的”开头的单词都必须替换为实际的数据库、用户和密码。 正如Panagiotis Kanavos在评论中指出的那样,您还应该删除Trusted_Connection=True;部分。这意味着您正在使用您的Windows用户进行身份验证(在Linux上显然不可用)。


如果您仍然可用,我在执行相同的过程时遇到了问题。 - Navi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接