从Ubuntu + PYODBC连接到SQL Server时出错

时间:2015-07-22 18:17:32

标签: python sql-server ubuntu pyodbc

我发现了许多类似的问题,但没有一个解决方案适合我。这似乎是一件非常简单的事情,但我仍无法找到解决方案。

我使用无头ubuntu服务器连接到Windows Server 2008上的SQL Server,使用python脚本使用pyodbc。该脚本在我的本地Windows机器上运行完美,但是当我在ubuntu服务器上尝试时,我收到错误:

Error: ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)')

我使用的连接字符串是:

connectionString='DRIVER={dbserverdsn};SERVER=10.23.11.10;DATABASE=Market;UID=usr;PWD=pwd;TDS_VERSION=7.2;PORT=1433'

有什么想法?提前谢谢

编辑:添加主文件

ODBC.INI

[dbserverdsn]
    Driver = FreeTDS
    Server = 10.23.11.10
    Port = 1433
    Database=Markets
    TDS_Version = 7.2

ODBCINST.INI

[FreeTDS]
    Description = v0.91 with protocol v7.2
    Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so

freetds.conf

[global]
    # TDS protocol version, use:
    # 7.3 for SQL Server 2008 or greater (tested through 2014)
    # 7.2 for SQL Server 2005
    # 7.1 for SQL Server 2000
    # 7.0 for SQL Server 7
    tds version = 7.2
    port = 1433
    text size = 64512

# A typical Microsoft server
[dbserverdsn]
    host = 10.23.11.10
    port = 1433
    tds version = 7.2

1 个答案:

答案 0 :(得分:3)

Microsoft预安装了一个与SQL Server通信的驱动程序,Ubuntu没有。 FreeTDS提供了我使用过的最好的驱动程序(MS提供的驱动程序给了我一些问题)。以下是如何在Ubuntu上安装您的先决条件:

# Install pre-requesite packages
sudo apt-get install unixodbc unixodbc-dev freetds-dev freetds-bin tdsodbc

您需要配置/etc/freetds/freetds.conf以将unixODBC桥接到SQL Server下一步:

[global]
    # TDS protocol version, use:
    # 7.3 for SQL Server 2008 or greater (tested through 2014)
    # 7.2 for SQL Server 2005
    # 7.1 for SQL Server 2000
    # 7.0 for SQL Server 7
    tds version = 7.2
    port = 1433
    text size = 64512

# A typical Microsoft server
[dbserverdsn]
    host = dbserver.domain.com
    port = 1433
    tds version = 7.2

在这里,您将unixODBC插入/etc/odbcinst.ini中的FreeTDS并提供FreeTDS驱动程序的路径:

[FreeTDS]
Description = v0.91 with protocol v7.2
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so

最后但并非最不重要的是,编辑/etc/odbc.ini,以便Python / unixODBC可以看到整个堆栈和FreeTDS数据源:

[dbserverdsn]
Driver = FreeTDS
Server = dbserver.domain.com
Port = 1433
TDS_Version = 7.2

你可以使用' tsql'来测试Ubuntu命令行中的问题。和' isql'命令行实用程序并发布您收到的任何错误。

然后,为您的连接字符串:

connectionString='DRIVER={FreeTDS};SERVER=10.23.11.10;PORT=1433;DATABASE=Market;UID=*;PWD=*;TDS_VERSION=7.2'
祝你好运!