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

Python 从Ubuntu连接到SQL Server时出错+;PYODBC,python,sql-server,ubuntu,pyodbc,Python,Sql Server,Ubuntu,Pyodbc,我发现了许多类似的问题,但没有一个解决方案适合我。这似乎是一件很简单的事情,但我仍然找不到解决办法 我正在使用一个无头ubuntu服务器连接到windows server 2008上的SQL服务器,使用python脚本,该脚本使用pyodbc进行连接。该脚本在我本地的windows机器上运行得很好,但当我在ubuntu服务器上尝试时,我发现错误: Error: ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not fo

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

我正在使用一个无头ubuntu服务器连接到windows server 2008上的SQL服务器,使用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

微软预装了一个与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”和“isql”命令行实用程序在Ubuntu的命令行上测试问题,并发布收到的任何错误

然后,对于您的连接字符串:

connectionString='DRIVER={FreeTDS};SERVER=10.23.11.10;PORT=1433;DATABASE=Market;UID=*;PWD=*;TDS_VERSION=7.2'

祝你好运

非常感谢您的回复!非常准确。但是,不幸的是,我可以让tsql工作,但仍然不能使用pyodbc。找不到获取错误[unixODBC][Driver Manager]数据源名称,并且未指定默认驱动程序。有什么想法吗?再次感谢您。您是否使用
isql
运行了测试<代码>tsql测试FreeTDS是否可以与SQL Server对话
isql
测试unixODBC是否可以通过FreeTDS与SQL Server进行通信,从而获得更多的堆栈。如果
isql
没有连接(从错误中可以看出,问题就出在这里),那么您就知道odbc.ini/odbcinst.ini和FreeTDS之间的配置有问题。我在连接字符串中也犯了一个错误;我忘了包括
PORT=1433我在回答中已对其进行了修改。你也试试吗?再次非常感谢你。使用isql是一个很好的提示。但我还是没能让它工作。我发现一个帖子有类似的问题,但答案对我没有帮助。在我的例子中,主机和服务器都是本地的,所以我尝试使用IP和服务器名,但都不起作用。我在isql中遇到的错误与[IM002][unixODBC][Driver Manager]数据源名称相同,未找到,并且未指定默认驱动程序[isql]错误:无法SQLConnect任何想法?再次非常感谢你。有几件事需要尝试:首先,让我们看看您安装了哪些DSN:
odbcinst-q-s
但是,这些DSN只是用于测试,因为我们直接使用Python连接到服务器。在您的连接字符串中,这个:
DRIVER={dbserverdsn}
仍然应该是:
DRIVER={FreeTDS}
对于测试isql,您正在这样做:
isql dbserverdsn用户名密码-v
?当然,替换您的用户名和密码。