PyODBC:即使驱动程序存在也无法打开

新手上路,请多包涵

我是 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”,文件确实存在!

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

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

我不知道如何解决这些问题中的任何一个。

谢谢 !

原文由 Joseph Yourine 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 963
2 个回答

在遵循 SQL Server Linux ODBC 驱动程序 的 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) 进行测试,然后它给了我相同的驱动程序未找到错误。为了解决这个问题,我必须创建一个符号链接来修复 libodbcinst.so.2

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

原文由 RBarreto 发布,翻译遵循 CC BY-SA 3.0 许可协议

我在 MAC OS 上遇到了同样的问题 “找不到文件(0)(SQLDriverConnect)” ,代码如下

cnxn = pyodbc.connect(’ DRIVER={SQL Server 的 ODBC 驱动程序 13} ;SERVER=myServerIP,1433;DATABASE=myDBName;UID=sa;PWD=dbPassword’)

谷歌搜索了两天后,即使修改 freetds.conf、odbcinst.ini 和 odbc.ini 也无法解决问题

最后,我通过替换 DRIVER 值找到了解决方案

cnxn = pyodbc.connect(’ DRIVER={/usr/local/lib/libmsodbcsql.13.dylib} ;SERVER=myServerIP,1433;DATABASE=myDBName;UID=sa;PWD=dbPassword’)

我的开发环境

  • MAC 操作系统 El Capitan
  • 蟒蛇 3.6.1 在蟒蛇

原文由 Karen Chang 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题