pyodbc无法在RedHat 5.4上工作。尝试使用unixODBC和FreeTDS连接到ms-sql数据库服务器?

问题描述:

我在使用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。 –

尝试是这样的:

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