我发现了很多类似的问题,但没有一个解决方案适合我。这似乎是一个很简单的问题,但我仍然找不到解决方案。
我正在使用 headless 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
最佳答案
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
在这里,您可以在/etc/odbcinst.ini 中将 unixODBC 插入 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'
祝你好运!
关于python - 从 Ubuntu+PYODBC 连接到 SQL Server 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31570979/