【问题标题】:pyodbc not working on RedHat 5.4. Trying to connect to ms-sql database server using unixODBC and FreeTDS?pyodbc 无法在 RedHat 5.4 上运行。尝试使用 unixODBC 和 FreeTDS 连接到 ms-sql 数据库服务器?
【发布时间】:2016-10-21 11:16:24
【问题描述】:

我在尝试使用 pyobdc 访问 ms-sql 数据库时遇到问题。

这是系统配置: 蟒蛇 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 天我一直在尝试解决这个问题。但还没有运气。因此,任何帮助/建议都会非常有帮助。 我已经通过谷歌搜索了。 在此先感谢:)

【问题讨论】:

  • 您在 Python 中的 DRIVER 与 odbcinst.ini 中的不匹配,并且您没有在连接字符串中指定 TDS 版本。解决方案如下。
  • @FlipperPA:感谢您的回答。很抱歉司机的错别字。我只修改了大部分内容,忘记修改 DRIVER=ms-sql。

标签: sql-server redhat pyodbc freetds unixodbc


【解决方案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 层。祝你好运!

【讨论】:

  • 非常感谢 :) 由于您的帮助,我又节省了几天时间。以上答案适用于 TDS_Version=8.0
  • 太棒了!您可以使用复选框将答案标记为正确吗?此外,如果您检查链接,您将不想使用 8.0。虽然它现在可以工作,但它不会在未来版本的 FreeTDS 中。如果你想将来证明,你会想要使用 7.2。 :)
猜你喜欢
  • 2016-10-22
  • 2011-02-23
  • 2016-09-03
  • 2011-03-16
  • 2018-04-23
  • 1970-01-01
  • 2014-12-31
  • 1970-01-01
  • 2013-05-31
相关资源
最近更新 更多