远程连接到MS SQL - 使用SQL Server Management Studio使用pyodbc与成功时出错

问题描述 投票:4回答:3

我在同一网络中有一个MS SQL数据库,但在其他计算机中。使用SQL Server Management Studio(SSMS)Express,我可以找到数据库并连接没有问题。

但是当我使用pyodbc连接到同一台服务器时:

import pyodbc

server = r"xxxER\xxxSQLSERV"
db = "xxxDB"
user = "xxx"
password = "xxxx"
conn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server + ';DATABASE=' + db +';UID=' + user + ';PWD=' + password)

我收到以下错误:

pyodbc.OperationalError: ('HYT00', '[HYT00] [Microsoft][ODBC SQL Server Driver]Login timeout expired (0) (SQLDriverConnect)')

OBS:我猜服务器字符串应该是正确的,因为如果我更改它,我总会得到以下错误:

pyodbc.Error: ('08001', '[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied. (17) (SQLDriverConnect); [01000] [Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()). (53)')

这里的图像显示了使用SQL Server Studio Express远程连接时的成功。

enter image description here

python sql sql-server ssms pyodbc
3个回答
1
投票

尝试指定端口:

import pyodbc

server = r"xxxER\xxxSQLSERV"
db = "xxxDB"
user = "xxx"
password = "xxxx"
port = "1433"
conn = pyodbc.connect('DRIVER={SQL Server};SERVER=' + server + ';PORT=' + port + ';DATABASE=' + db +';UID=' + user + ';PWD=' + password)

如果您仍然遇到问题,请尝试使用服务器的IP或FQDN。


1
投票

尝试将驱动程序从“SQL Server”更改为“SQL Server Native Client 11.0”。

我有相同的错误消息,这为我修复了它。


0
投票

“但为什么 ...?”

对于那些对SQL Server Management Studio(SSMS)可以连接到servername\instance而其他应用程序(例如我们的pyodbc应用程序)无法连接的人感兴趣,这是因为SSMS在Windows注册表中保留了MRU(最近使用的)端口号列表

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SuperSocketNetLib\LastConnect

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSSQLServer\Client\SuperSocketNetLib\LastConnect

每个MRU条目(注册表值)看起来像这样:

Name: PANORAMA\SQLEXPRESS
Type: REG_SZ 
Data: -1006030326:tcp:PANORAMA,52865

一旦SSMS通过远程计算机上的SQL Browser服务通过实例名称成功连接,即使端口号未更改,即使SQL浏览器不再在远程计算机上运行,​​它也可以继续通过实例名称进行连接。不使用此MRU列表的应用程序(如我们的pyodbc应用程序)需要在每次要按实例名称连接时在远程计算机上运行SQL Browser服务。

最常见的情况:

  • 我想连接到YOUR-PC\SQLEXPRESS。我尝试在MY-PC上从SSMS做到这一点,但它不起作用,因为SQL浏览器安装时在YOUR-PC上将“Start Mode”设置为“Manual”。
  • 我请你在YOUR-PC上启动SQL浏览器服务,并且请遵守,但是你只是启动服务而忘记将“启动模式”设置更改为“自动”。
  • 我能够通过SSMS(它缓存MRU中的YOUR-PC\SQLEXPRESS端口)进行连接。我的python应用程序也可以连接。
  • 下次YOUR-PC重新启动后,我可以通过SSMS(通过MRU)连接,但我的python应用程序不能(因为SQL浏览器服务不再在YOUR-PC上运行)。
© www.soinside.com 2019 - 2024. All rights reserved.