使用 SQL Server Management Studio (SSMS) Express,我可以找到数据库并毫无问题地连接。
但是当我使用 pyodbc 通过以下方式连接到同一服务器时:
import pyodbc
Server = r"xxxERxxxSQLSERV"
db = "xxxDB"
user = "xxx"
password = "xxxx"
conn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server + ';DATABASE=' + db +';UID=' + user + ';PWD=' + password)
通过在本地使用 Pyhton,我可以连接,但是当我尝试在 linux 服务器中出现以下错误时
pyodbc.OperationalError: ('HYT00', u'[HYT00] [unixODBC][Microsoft][ODBC Driver 13 for SQL Server]Login timeout expired (0) (SQLDriverConnect)')
我也尝试使用适用于 SQL Server 的 ODBC 驱动程序 17,但面临同样的问题。任何人都可以就此建议我吗?
Microsoft 的 SQL Server ODBC 驱动程序无法解析实例名称。您可以使用免费的 sqlserverport 模块获取相应的端口号并使用该端口号进行连接。
尝试从服务器中删除实例并将其设置为
Server = "xxxER"
或者,如果您有端口号,请将其附加为
Server = "xxxER,portNo"
我有这个问题,并在这里解决了我的问题。只需添加版本。
conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server + ';DATABASE=' + db +';UID=' + user + ';PWD=' + password)
如果不起作用,请将版本 17 更改为 13 如果不是 11 .列出 ODBC 的版本。
检查您的 mssql 网络配置,我的问题就在那里。
为所有 IP 启用端口 1433。
现在正在使用 IP 和主机名。
我正在使用带有远程服务器端口转发到本地主机的SSH隧道,1433。如果使用以下方法,则此 pyodbc 连接会间歇性失败:
cnxn = pyodbc.connect('driver={ODBC Driver 17 for SQL Server};Server=localhost, 1433;'...
用 127.0.0.1 替换本地主机似乎一直在工作
cnxn = pyodbc.connect('driver={ODBC Driver 17 for SQL Server};服务器=127.0.0.1, 1433;
顺便说一下,使用Ruby和FreeTDS也做了同样的事情,Localhost,1433
一直在工作。必须是 pyodbc 包中的东西或其方法,有时会删除一些信息以使服务器上的 DBMS 无法响应/超时
这对我有用:
mssql://DRIVER={ODBC Driver 17 for SQL Server};SERVER={server_address,PORT};DATABASE=<my_database>;UID=<my_username>;PWD=<my_password>