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

Jos*_*ine 21 python linux sql-server unixodbc 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")
Run Code Online (Sandbox Code Playgroud)

它返回:

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

我没有遗忘的是,PyODBC似乎从odbcinst.ini读取了正确的文件路径,但仍然不起作用.

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

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

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

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

谢谢 !

小智 14

在遵循SQL Server Linux ODBC Driver的微软教程后,我在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
Run Code Online (Sandbox Code Playgroud)

问题解决了,用isql测试:

+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> 
Run Code Online (Sandbox Code Playgroud)

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

sudo ln -s /usr/lib64/libodbcinst.so.2 /lib/x86_64-linux-gnu/libodbcinst.so.2
Run Code Online (Sandbox Code Playgroud)


Kar*_*ang 8

我在 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
  • Anaconda 中的 python 3.6.1