2010-11-11 271 views
8

我試圖通過pymssql從本地服務器上的* nix系統連接到在Windows XP系統上運行的SQL Server。然而,連接失敗如下圖所示無法通過pymssql連接到SQL Server

db = pymssql.connect(host='192.168.1.102',user='www',password='test',database='TestDB') 
Traceback (most recent call last): 

File "<stdin>", line 1, in <module> 
File "pymssql.pyx", line 457, in pymssql.connect (pymssql.c:6041) 
raise InterfaceError(e[0]) 
pymssql.InterfaceError: Connection to the database failed for an unknown reason. 

事情我已經嘗試:

  1. 設置SQL服務器和瀏覽器作爲一個網絡服務器上運行。
  2. 設置用戶'www'。我也在SQL Studio本地測試了這個用戶。
  3. 關閉Windows防火牆(當然是暫時的)。

我錯過了一些東西 - 我只是不知道它是什麼。我嘗試了Windows上的所有無限菜單選項無濟於事。我注意到的一件事是,如果Windows防火牆開啓(我爲SQL Server設置了一個例外),python暫停很長時間,然後出現錯誤。如果防火牆關閉,錯誤是即時的。

有沒有我可以在SQL Server中看到的日誌?

+0

用於低級調試使用wireshark。 – 2010-11-11 01:27:55

+0

謝謝!我運行wireshark,它提供了一些數據 - 一個簡單的「ack」出現。然而,似乎還沒有太多要繼續。信息顯示「ms-sql-s> 50051 [RST,ACK] Seq = 1 Ack = 1 Win = 0 Len = 0 – Christopher 2010-11-11 02:44:29

+0

我看到更多詳細信息」專家信息「指出」連接重置(RST)「 - 爲什麼。 – Christopher 2010-11-11 03:20:36

回答

11

Got it!我認爲問題的根源不在於給予免費TDS所需的關注。免費的TDS顯然是pymssql的驅動程序,並提供了與其他數據庫的連接--SQL Server就是其中之一。

freetds.conf文件位於我的系統(Mac Book Pro)的/ usr/local/etc中。

此文件包含安裝的默認值。但是,我之前添加了一個定義,以便我可以連接但忘記了它,但很遺憾沒有記下它。

無論如何,這裏是我所附加freetds.conf一個例子:

[SomeDB] 
    host = 192.168.1.102 
    port = 1219 
    tds version = 7.0 

然而,令人不解的是,我的端口設置爲1219我有它手動設置爲1433在SQL工作室。另外,我使用TDS版本0.82,所以我不知道該怎麼配合7.0在

接下來,我使用「TSQL」如下測試連通性:

tsql -S SomeDB -U www 

我輸入密碼,並得到一個命令允許SQL查詢的行。

接下來,我測試使用pymssql如下連接:

db = pymssql.connect(host='SomeDB',user='www',password='cylon',database='TestDB') 

正如你所看到的,我需要從freetds.conf文件中使用主機名,而不是IP直接。然後我用另外的python代碼測試了一個簡單的查詢,以確保我可以從數據庫中讀取數據。

我希望這可以幫助別人在未來。

+0

我的Windows操作系統似乎沒有freetds.conf。我得到了與連接字符串相同的錯誤:'host = 10.43.32.211:1433,database = v000001,trusted = True' – IAbstract 2015-03-24 19:42:14

+0

哦,也許'pymssql'不使用連接字符串,但命名爲params(與其他一些庫不同那裏)...有點奇怪,但沒關係。 – IAbstract 2015-03-24 19:46:00

0

是你在工作的Windows機器嗎?指定端口1433. 它似乎是mssql客戶端api中的一個錯誤,該錯誤嘗試使用Namedpipes而不是TCP/IP。

+0

謝謝!看來我確實需要特別指定端口1433. Wireshark會顯示其他端口的其他響應。顯示「ms-sql-s」。 – Christopher 2010-11-11 02:45:07

2

看起來好像你已經解決了這個問題,但是對於來自Google的其他人來說,請檢查以確保MS SQL Server上已啓用混合模式授權。它默認只允許Windows授權,並且會在pymssql中導致此錯誤。