我是linux世界的新手,我想从Python查询Microsoft SQL Server . 我在Windows上使用它,它非常好,但在Linux中它非常痛苦 .
几个小时后,我终于成功使用unixODBC在Linux Mint上安装Microsoft ODBC驱动程序 .
然后,我 Build 了一个带有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”,文件确实存在!
那为什么它告诉我它不存在?以下是一些可能的线索:
-
我在虚拟环境中
-
我需要"read"权限,因为它是根文件路径
我不知道如何解决这些问题 .
谢谢 !
7 回答
我找到了一个适合我的答案here . 这是针对python 2.7的(因此可能不适用于那些正在寻找python 3.x解决方案的人) .
建议的解决方案是更新libgcc:4.8.5-2 - > 5.2.0-0
要更新libgcc,请使用此命令
在按照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
问题解决了,用isql测试:
之后我尝试使用pdo_odbc(PHP)进行测试,然后它给了我相同的驱动程序未找到错误 . 要解决这个问题,我必须创建一个符号链接来修复
libodbcinst.so.2
:我在MAC OS上遇到了同样的问题 'file not found (0) (SQLDriverConnect)' ,代码如下
谷歌搜索两天后,即使修改了freetds.conf,odbcinst.ini和odbc.ini也无法解决问题
最后,我通过替换 DRIVER 值找到了解决方案
我的开发环境
在Anaconda中
以下建议可能有助于解决问题:
确保驱动器配置INI文件存在
odbcinst -j
(检查odbcinst.ini
) .确保存在来自INI文件(运行:
odbcinst -j
)的已配置驱动程序的文件路径,并具有读取和可执行权限标志(O_RDONLY|O_CLOEXEC
) .如果仍然找不到文件错误,尽管文件存在,问题可能与
libgcc
版本不匹配有关nehaljwani's GitHub comment . 解决方案是通过运行conda update libgcc
命令更新libgcc
.相关:在AWS E2 ubuntu实例上连接时,SQL Server的ODBC驱动程序13无法在pyodbc上打开lib .
曾经有过相同的问题.. 1.try conda update libgcc(这是因为通过pip和conda安装的pyodbc寻找不同版本的文件..)..这可能已经修复了.....链接:https://github.com/ContinuumIO/anaconda-issues/issues/1639寻找nehaljwani回答 .
2.还要在/etc/odbcinst.ini和/etc/odbc.ini中正确检查odbc文件的版本号...名称应该匹配,还有驱动程序路径 .
我在安装libssl1.0.0后解决了这个问题 .
首先,我以这种方式设置我的连接字符串:
然后,我安装了libssl1.0.0:
Finnaly,我设置了语言环境:
完成这些步骤后,我的python模块能够找到并连接到数据库 .
也许有点晚了,但我留下了适合我的脚本 .
我的问题和你的一样,我测试了所有的选项,比如更改驱动程序位置,制作符号链接,修改/etc/*.ini文件等等......没有用 .
我的问题,在alpine的docker容器中运行python 3.6,pyodbc包是库 libssl1.0.0
在这里,您将找到使用驱动程序v13的my installation script for pyodbc Debian 8 (alpine) docker image
我为数据库连接运行的命令是: