Pypyodbc:连接SQL服务器时出现“无法打开lib 'FreeTDS':找不到文件”错误

23

我正在尝试在Mac上使用Pypyodbc连接到SQL Server,但是我遇到了以下错误:

pypyodbc.DatabaseError: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'FreeTDS' : file not found")

我已经安装了freeTDS和unixodbc

brew install unixodbc
brew install freetds

以下是我的带有虚拟数据的连接字符串:

connection_String = "Driver=FreeTDS;Server=123.12.12.12;tds_version=7.2;Database=db_db;Uid=username:pwd=password:port=1433"

这篇 Stack Overflow 的帖子回答了你的问题吗?(https://dev59.com/UGgt5IYBdhLWcg3w-SJM) - AlexLordThorsen
不是Mac用户,但在其他*nix系统中,我会检查FreeTDS的so文件是否在LD_LIBRARY_PATH中。 - DM Graves
如果您遇到这个问题,我在重复的问题上发布的答案可能会有所帮助。 - qris
2个回答

15

检查您的/etc/odbcinst.ini文件或它可能在/etc/unixODBC/odbcinst.ini下。

在您的连接字符串中,您有类似于“DRIVER=FreeTDS”的内容,那个文件中需要有以下条目。您可能需要更改驱动程序位置。

[FreeTDS]
Description             = FreeTDS unixODBC Driver
Driver          = /usr/lib64/libtdsodbc.so.0
Setup           = /usr/lib64/libtdsodbc.so.0
UsageCount              = 1

2
在OSX上libtdsodbc.so.0不存在。 - ierdna
3
因某种原因它被称为libtdsodbc.0.so,我的(通过brew安装)位于/etc/local/lib/libtdsodbc.0.so - user31415629
有人能告诉我在 Monterey 上的 M1 Mac 上 odbcinst.ini 存放在哪里吗?在 etc 中似乎没有任何作用... - Brian Postow

11

首先,您可以使用 pymssql,它不需要配置unixODBC,在这里是问题所在。

要使用FreeTDS配置unixODBC,请执行以下操作:http://www.unixodbc.org/doc/FreeTDS.html

FreeTDS附带了一个名为tsql的工具。使用它来测试连接字符串。它是一个非常简单的工具,但有点繁琐。 :-/

最后,还有一个类似的问题在StackOverflow中存在其他问题:如何配置pyodbc以使其正确接受使用freeTDS和unixODBC从SQL Server传递的字符串?


配置unixODBC和FreeTDS的链接很好,但是在OS X上没有“libtdsodbc.so”文件。 - ierdna
在 Archlinux 中,它是一个名为 "freetds" 的软件包的一部分。也许你可以安装那个库。 - Javier
1
@andrei 如果你已经安装了Freetds,请先卸载它,然后使用"brew install freetds --with-unixodbc"来解决我的问题。请参考这里https://dev59.com/o14c5IYBdhLWcg3wT4xO - alys
首先,我成功地让pyodbc工作了,然后我决定升级Python到Python3(或者说在Python2旁边安装另一个版本),现在我又无法让它正常工作了。 - ierdna
2
在MacOS Monterey上,执行brew install freetds --with-unixodbc命令会报错:invalid option: --with-unixodbc。该选项已不再需要,请参考https://github.com/FreeTDS/freetds/issues/257。 - user1255933

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接