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



我是Linux世界的新手,我想从Python查询Microsoft SQL Server。我在Windows上使用它,它非常好,但在Linux中它非常痛苦。

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

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

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

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

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

谢谢!

在遵循 SQL Server Linux ODBC 驱动程序的微软教程后,我在 Ubuntu 14 上也遇到了同样的问题。

该文件存在,运行 ldd 后,它显示缺少依赖项:

/opt/microsoft/msodbcsql/

lib64/libmsodbcsql-13.0.so.0.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 的存储库在 3.4.20 版上没有 GLIBCXX,它是 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

我在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')

我的开发环境

  • MAC OS El Capitan
  • 蟒蛇 3.6.1 in Anaconda

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

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

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

conda update libgcc

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

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

    相关:适用于 SQL Server 的 ODBC Driver 13 在 AWS E2 ubuntu 实例上连接时无法在 pyodbc 上打开 lib。

  • 对于 macOS,请参阅:通过自制软件安装 ODBC。

也许有点晚了,但我留下了这个对我有用的脚本。

的问题和你的问题一样,我测试了所有选项,例如更改驱动程序位置、制作符号链接、修改/etc/*.ini 文件等......没有任何效果。

我的问题,运行python 3.6,pyodbc包在alpine的docker容器中是库libssl1.0.0

在这里,您将找到我的 pyodbc Debian 8 (alpine) docker 镜像的安装脚本,使用驱动程序 v13

DRIVER={ODBC Driver 13 for SQL Server}

我为数据库连接运行的命令是:

import pyodbc
connection_string = 'DRIVER={ODBC Driver 13 for SQL Server};'
connection_string += 'SERVER={0};DATABASE={1};UID={2};PWD={3};'.format(host,dbname,user,pwd)
connection = pyodbc.connect(connection_string)

我在安装 libssl1.0.0 后解决了这个问题。

首先,我以这种方式设置连接字符串:

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

然后,我安装了libssl1.0.0:

    echo "deb http://security.debian.org/debian-security jessie/updates main" >> /etc/apt/sources.list
    apt-get install libssl1.0.0

最后,我设置了语言环境:

    apt-get -y install locales 
    echo "en_US.UTF-8 UTF-8" > /etc/locale.gen 

完成这些步骤后,我的python模块能够找到并连接到数据库。

曾经遇到过同样的问题。1.尝试 conda 更新 libgcc(这是因为通过 pip 和 conda 安装的 pyodbc 会查找不同版本的文件..)。这可能已被修复.....link:https://github.com/ContinuumIO/anaconda-issues/issues/1639寻找内哈尔吉瓦尼的答案。

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

在装有macOS Mavericks的Mac mini M1上遇到了同样的问题。从支持 ARM 的Microsoft安装驱动程序 18 后,它仍然不起作用。

brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
brew update
HOMEBREW_NO_ENV_FILTERING=1 ACCEPT_EULA=Y brew install msodbcsql18 mssql-tools18

但是,命令行上的 isql 能够连接到数据库。

isql -v -k "DRIVER={ODBC Driver 18 for SQL Server};SERVER=<MYSERVERNAME>;PORT=<MYPORT>;DATABASE=<MYDATABASE>;UID=<USERNAME>;PWD=<PASSWORD>"

最后,诀窍是卸载pyodbc并重新安装。

python -m pip uninstall pyodbc
python -m pip install pyodbc

相关内容

  • 没有找到相关文章

最新更新