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

标签 python sql-server ubuntu pyodbc

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

我正在使用 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/

相关文章:

python - 我无法通过请求表单代码从 html 获取数据到 Flask 上的应用程序

sql - 如何在sql表中找到图像的大小?

ruby-on-rails - 错误 : Error installing racc: ERROR: Failed to build gem native extension

bash - Gitlab CI 配置对条件语句无效

python - 如果我使用 QT For Windows,我的应用程序会在 Linux/Mac/Windows 上运行良好吗?

python - groupby 操作后过滤掉数据帧

python - 使用 Colanderalchemy 进行 Cornice 模式验证

sql-server - SQL Server 2008 是否调整了每行 8060 字节的限制?

sql-server - 更改SQL Server Management Studio的默认安装路径

bash - 无法从 rc.local 中执行脚本