![](/img/trans.png)
[英]Cant Connect to remote MS SQL server using PYODBC on Windows 7 in Python
[英]Remote connection to MS SQL - Error using pyodbc vs success using SQL Server Management Studio
我在同一網絡中但在其他計算機上有一個 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 進行遠程連接時成功的圖像。
“但為什么 ...?”
對於那些對為什么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 Browser 不再在遠程計算機上運行,只要端口號未更改,它也可以繼續按實例名稱進行連接。 不使用此 MRU 列表的應用程序(如我們的 pyodbc 應用程序)需要在每次要按實例名稱連接時在遠程計算機上運行 SQL Browser 服務。
最常見的場景:
YOUR-PC\\SQLEXPRESS
。 我嘗試從MY-PC
上的 SSMS 執行此操作,但它不起作用,因為 SQL 瀏覽器安裝時在YOUR-PC
上將“啟動模式”設置為“手動”。YOUR-PC
上啟動 SQL 瀏覽器服務,並且請您遵守,但您只是啟動了該服務而忘記將“啟動模式”設置更改為“自動”。YOUR-PC\\SQLEXPRESS
端口)進行連接。 我的 python 應用程序也可以連接。YOUR-PC
重新啟動后,我可以通過 SSMS(通過 MRU)進行連接,但我的 python 應用程序不能(因為 SQL Browser 服務不再在YOUR-PC
上運行)。嘗試指定端口:
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。
嘗試將驅動程序從“SQL Server”更改為“SQL Server Native Client 11.0”。
我有相同的錯誤消息,這為我修復了它。
我有這個問題。我可以與 Management Studio (SSMS) 連接,但不能與 pyodbc 一起使用。 我添加了 sql 的 odbc 版本並工作了。
將您的代碼更改為:
conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server + ';DATABASE=' + db +';UID=' + user + ';PWD=' + password)
如果不起作用,請將版本 17 更改為 13 如果不是 11 。 列出 ODBC 的版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.