python - PyODBC : can't open the driver even if it exists

标签 python sql-server linux pyodbc unixodbc

我是 linux 世界的新手,我想从 Python 查询 Microsoft SQL Server。我在 Windows 上用过,非常好,但在 Linux 上就很痛苦。

几个小时后,我终于用 unixODBC 在 Linux Mint 上成功安装了 Microsoft ODBC 驱动程序。

然后,我用 python 3 环境设置了一个 anaconda。

然后我这样做:

import pyodbc as odbc

sql_PIM = odbc.connect("Driver={ODBC Driver 13 for SQL Server};Server=XXX;Database=YYY;Trusted_Connection=Yes")

它返回:

('01000', "[01000] [unixODBC][Driver Manager]Can't open lib '/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0' : file not found (0) (SQLDriverConnect)")

我不明白的是,PyODBC 似乎从 odbcinst.ini 读取了正确的文件路径,但仍然无法正常工作。

我去了“/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0”,文件确实存在!

那么为什么它告诉我它不存在? 以下是一些可能的线索:

  • 我在虚拟环境中
  • 我需要“读取”权限,因为它是根文件路径

我不知道如何解决这些问题。

谢谢!

最佳答案

在遵循 SQL Server Linux ODBC Driver 的 microsoft 教程后,我在 Ubuntu 14 上也遇到了同样的问题。 .

文件存在,运行ldd后,显示缺少依赖项:

/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0:/usr/lib/x86_64-linux-gnu/libstdc++.so.6:版本GLIBCXX_3.4.20' not found (required by /opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0) /opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version未找到 CXXABI_1.3.8'(需要

搜索了一段时间后我发现它是因为 Ubuntu 的 repo 在 3.4.20 版本上没有 GLIBCXX,它是在 3.4.19。

然后我向 Ubuntu 添加了一个 repo,更新它并强制它升级 libstdc++6

sudo add-apt-repository ppa:ubuntu-toolchain-r/test 
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install libstdc++6

问题已解决,用 isql 测试:

+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> 

之后我尝试使用 pdo_odbc (PHP) 进行测试,然后它给了我相同的驱动程序未找到错误。 为了解决这个问题,我必须创建一个符号链接(symbolic link)来修复 libodbcinst.so.2 :

sudo ln -s /usr/lib64/libodbcinst.so.2 /lib/x86_64-linux-gnu/libodbcinst.so.2

关于python - PyODBC : can't open the driver even if it exists,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34785653/

相关文章:

python - 对 numpy 数组进行下采样的最佳方法是什么?

python - 大型数组的插值和外插

python - NumPy 数组中的矢量化字符串处理

sql-server - 如何在SSRS中使用多值参数列表过滤列

linux - 批量文件夹重命名

c - POSIX lfind()/lsearch() 的性能比手动循环更好吗?

linux - 我可以在 docker 容器环境中运行主机命令吗?

python - 这个Python代码可以用列表理解来表达吗?

SQL 查询返回错误结果

c# - 如何测试C#代码与Sql Server存储过程的同步