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

2024-05-20 00:54:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我是linux新手,我想从Python查询一个Microsoft SQL服务器。我在Windows上用过它,它非常好,但在Linux上却很痛苦。

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

然后,我用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”,文件实际上存在!

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

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

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

谢谢!


Tags: 文件路径sqlserverlinuxdrivermicrosoftopt
3条回答

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

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

我在MAC OS上遇到了同样的问题“找不到文件(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

最后,我通过替换驱动程序值找到了解决方案

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

我的开发环境

  • 马科斯埃尔卡皮坦
  • Python3.6.1

我找到了一个对我有用的答案。这是针对Python2.7的(因此对于那些正在寻找Python3.x解决方案的人来说可能不起作用)。

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

要更新libgcc,请使用以下命令

conda update libgcc

相关问题 更多 >