2016-06-20 45 views
1

我在使用pyobdc訪問ms-sql數據庫時遇到問題。pyodbc無法在RedHat 5.4上工作。嘗試使用unixODBC和FreeTDS連接到ms-sql數據庫服務器?

下面是系統配置: Python的2.7.11 Pyodbc 3.0.7 的RedHat 5.4(Tikanga)32位系統 的Microsoft SQL Server 2012(數據庫服務器) 的unixODBC 2.3.0

$ tsql -C輸出:

Compile-time settings (established with the "configure" script) 
          Version: freetds v0.91 
      freetds.conf directory: /etc 
    MS db-lib source compatibility: yes 
     Sybase binary compatibility: no 
         Thread safety: yes 
         iconv library: yes 
         TDS version: 5.0 
           iODBC: no 
          unixodbc: yes 
       SSPI "trusted" logins: no 
          Kerberos: no 

$ odbcinst -j出放:

unixODBC 2.3.0 
DRIVERS............: /usr/local/etc/odbcinst.ini 
SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini 
FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources 
USER DATA SOURCES..: /root/.odbc.ini 
SQLULEN Size.......: 4 
SQLLEN Size........: 4 
SQLSETPOSIROW Size.: 2 

$ cat /usr/local/etc/odbcinst.ini輸出:

[ms-sql] 
Description=TDS connection 
Driver=/usr/local/lib/libtdsodbc.so 
Setup=/usr/local/lib/libtdsodbc.so 
FileUsage=1 
UsageCount=1 

$ cat /usr/local/etc/odbc.ini輸出:

[sqlserverdatasource] 
Driver = ms-sql 
Description = ODBC connection via ms-sql 
Trace = No 
Server = >IP Addresss To Database server< 
Port = >Port Number< 
Database = >Database name< 

$ cat /etc/freetds.conf輸出:

[sql-server] 
host  = >IP Addresss To Database server< 
port  = >Port Number< 
tds version = 8.0 

命令這是給我的錯誤:

connection = pyodbc.connect(r'DRIVER={FreeTDS};SERVER=>IP Addresss To Database server<; PORT=>Port Number<;DATABASE=Database name;UID=Database UID;PWD=DatabasePasswd;') 

錯誤:

Traceback (most recent call last): File "<stdin>", line 1, in 
<module> pyodbc.Error: ('IM002', '[IM002] [unixODBC][Driver 
Manager]Data source name not found, and no default driver specified 
(0) (SQLDriverConnect)') 

我試圖解決這個問題的最後3天。但沒有運氣。所以任何幫助/建議都會非常有幫助。 我已經通過Google搜索了。 感謝提前:)

+0

Python中的DRIVER與'odbcinst.ini'中的DRIVER不匹配,並且您沒有在連接字符串中指定TDS版本。解決方案如下。 – FlipperPA

+0

@FlipperPA:謝謝你的回答。對於Driver中的錯別字,我們深表歉意。我修改了大部分內容,忘記修改DRIVER = ms-sql。 –

回答

1

嘗試是這樣的:

freetds.conf:

[sql-server] 
    host = sql-server.host.com 
    port = 1433 
    tds version = 7.2 

ODBC.INI:

[sql-server] 
    Driver = FreeTDS 
    Server = sql-server.host.com 
    Port = 1433 
    TDS_Version = 7.2 

ODBCINST.INI:

[FreeTDS] 
    Description = v0.91 with protocol v7.2 
    Driver = /usr/local/lib/libtdsodbc.so 

在Python:

connection = pyodbc.connect(r'DRIVER={FreeTDS};SERVER=sql-server.host.com;PORT=1433;DATABASE=Database name;UID=Database Username;PWD=DatabasePasswd;TDS_Version=7.2') 

TDS版本8.0不存在。 7.2是FreeTDS 0.91的最高支持。看到這裏解釋的混亂:如果您仍然有問題,http://www.freetds.org/userguide/choosingtdsprotocol.htm

,嘗試用tsqlisql測試,分別測試連接堆棧的freetds的unixODBC的和層。祝你好運!

+0

非常感謝你:)因爲你的幫助,我又挽救了幾天。以上答案與** TDS_Version = 8.0 **一起工作。 –

+0

太棒了!您可以用複選框將答案標記爲正確嗎?此外,如果您檢查鏈接,則不會希望使用8.0。儘管它現在可以工作,但它不會在未來的FreeTDS版本中使用。如果你想要將來證明,你會想使用7.2。 :) – FlipperPA

相關問題