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读取正确的文件path,仍然无法正常工作。

我去“/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0”和文件实际上存在!

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

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

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

谢谢 !

Solutions Collecting From Web of "PyODBC:即使存在,也不能打开驱动程序"

在遵循SQL server Linux ODBC驱动程序的微软教程之后,我在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的回购没有GLIBCXX版本3.4.20,它是在3.4.19。

然后,我添加了一个回购Ubuntu,更新它,并强迫它升级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 

我在这里找到了一个适合我的答案。 这是为python 2.7(所以可能不适用于那些正在寻找一个解决方案的python 3.x)。

建议的解决方案是更新libgcc:4.8.5-2 – > 5.2.0-0

要更新libgcc,请使用此命令

 conda update libgcc 

我在MAC操作系统上遇到了同样的问题“找不到文件(0)(SQLDriverConnect)” ,下面的代码

cnxn = pyodbc.connect(' DRIVER = {ODBC Driver 13 for SQL server} ; 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 OS EI Capitan
  • python 3.6.1在蟒蛇

以下建议可能有助于解决问题:

  • 确保驱动器配置INI文件存在odbcinst -j (检查odbcinst.ini )。
  • 确保从INI文件(运行: odbcinst -j )配置的驱动程序的文件路径存在并具有读取和可执行权限标记( O_RDONLY|O_CLOEXEC )。
  • 如果你仍然有文件找不到错误,尽管文件存在,这个问题可能与libgcc版本不匹配,根据nehaljwani的GitHub评论 。 解决方案是通过运行conda update libgcc命令更新您的libgcc

    相关: 用于SQL server的ODBC驱动程序13在连接AWS E2 ubuntu实例时无法在pyodbc上打开lib 。

  • 对于macOS,请参阅: 通过HomeBrew安装ODBC 。

有同样的问题一次.. 1.try conda更新libgcc(这是因为通过pip和conda安装pyodbc寻找不同版本的文件..)..这可能已经修复…..链接: https:/ /github.com/ContinuumIO/anaconda-issues/issues/1639寻找nehaljwani答案。

2.也可以在/etc/odbcinst.ini和/etc/odbc.ini中正确检查odbc文件的版本号。名称应该匹配,也是驱动程序的路径。