无法打开 lib 'ODBC Driver 13 for SQL Server'?符号链接问题?

Posted

技术标签:

【中文标题】无法打开 lib \'ODBC Driver 13 for SQL Server\'?符号链接问题?【英文标题】:Can't open lib 'ODBC Driver 13 for SQL Server'? Sym linking issue?无法打开 lib 'ODBC Driver 13 for SQL Server'?符号链接问题? 【发布时间】:2017-11-15 14:00:13 【问题描述】:

当我尝试使用 pyodbc(在 mac 上)连接到 sql server 数据库时:

import pyodbc

server = '####'
database = '####'
username = '####@####'
password = '#####'
driver='ODBC Driver 13 for SQL Server'

pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1443;DATABASE='+database+';UID='+username+';PWD='+password)

我收到以下错误:

错误:('01000', "[01000] [unixODBC][Driver Manager]无法打开 lib 'ODBC Driver 13 for SQL Server' : 找不到文件 (0) (SQLDriverConnect)")

当我在实际驱动位置中路径时:

driver='/usr/local/lib/libmsodbcsql.13.dylib'

它开始工作了!

我的odbcinst.ini 看起来像这样:

[ODBC Driver 13 for SQL Server]
Description=Microsoft ODBC Driver 13 for SQL Server
Driver=/usr/local/lib/libmsodbcsql.13.dylib
UsageCount=1

我如何才能获得对driver='ODBC Driver 13 for SQL Server' 的引用以重新开始工作?

我最初使用this guide 来安装驱动程序。如果有帮助,我正在 Mac Sierra 上使用 anaconda?

【问题讨论】:

你是救命稻草 【参考方案1】:

跑步:

odbcinst -j

它产生了:

unixODBC 2.3.4
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /Users/emehex/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

我没有将文件复制到/etc/ 目录(不确定为什么 unixODBC 认为它们在那里),而是为每个文件创建了一个符号链接:

sudo ln -s /usr/local/etc/odbcinst.ini /etc/odbcinst.ini
sudo ln -s /usr/local/etc/odbc.ini /etc/odbc.ini

这解决了问题。

【讨论】:

很好的解决方案 - 回答您的问题。 unixODBC 默认在/etc 中搜索odbc.iniodbcinst.ini。它还将检查.odbc.ini.odbcinst.ini 的用户主目录。 (FreeTDS 对 freetds.conf / .freetds.conf 做了同样的事情,记录在案。) 这行得通(虽然我必须卸载并重新安装驱动程序docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/…),但有一个小错字:sudo ln -s /usr/local/etc/odbc.ini /etc/odbc.ini 如果您已更新到新版本的驱动程序,也会出现此错误。如果文件存在,请检查 /etc/odbcinst.ini 的内容,即: $ cat /etc/odbcinst.ini [ODBC Driver 17 for SQL Server] Description=Microsoft ODBC Driver 17 for SQL Server Driver=/opt/microsoft/msodbcsql /lib64/libmsodbcsql-17.0.so.1.1 UsageCount=1 然后更新您的 scipt 的内容以使用新的驱动程序。在这种情况下,驱动程序已从版本 13 更新到版本 17。我建议您添加此信息以确保完整性。 ln: 未能创建符号链接 '/etc/odbcinst.ini': 文件存在 文件存在错误意味着 odbcinst.ini 已经存在于 /etc 文件夹中。将文件重命名为 odbcinst.ini_old 并再次尝试 ln -s 命令,看看是否有效【参考方案2】:

在我的例子中,我有一个 Mac OS,以下命令解决了这个问题:

brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
brew update
brew install msodbcsql mssql-tools

注意 1: 可能需要提前安装unixodbcmsodbcsqlmssql-tools,如下:

brew install unixodbc

注意 2: 如果你还没有brew,macOS 的缺失包管理器,那么你可以从这里安装它:https://brew.sh/

注意 3:您可以使用以下命令验证您的安装是否为上面已经提到的@emehex:

odbcinst -j

sudo ln -s /usr/local/etc/odbcinst.ini /etc/odbcinst.ini
sudo ln -s /usr/local/etc/odbc.ini /etc/odbc.ini

【讨论】:

非常感谢您的快速修复 (Y) 我还必须在连接设置中添加驱动程序详细信息connection = pyodbc.connect("Driver=ODBC Driver 13 for SQL Server;" "Server=someHost;" "Database=dbname;" "uid=SA;pwd=passowrd") 这已经过时了,因为 brew 不再支持 --no-sandbox optin(自 2019 年开始)。已实施的修复是放弃该选项。见github.com/Microsoft/homebrew-mssql-release/issues/29 几个小时后我们有一个演示文稿,我的程序无法在 mac 上运行。这救了我们的命。 谢谢@ReneB.,效果很好。我发现我的代码首选版本 17 而不是 13。【参考方案3】:

就我而言,我必须将 pyodbc 数据库驱动程序字符串更改为driver='ODBC Driver 17 for SQL Server'

实际上,在我的 python 代码中 pyodbc 期待 ODBC 驱动程序 13 但是,由于 ODBC 驱动程序版本已更新(由于 ubuntu 更新)到当前版本 ODBC Driver 17,问题出现了。

【讨论】:

为我工作:driver=ODBC Driver 17 for SQL Server; 在 SQL Server 2019 上工作 - driver=ODBC Driver 17 for SQL Server;【参考方案4】:

就我而言,我通过以下三个步骤解决了问题:

# Step1: install unixodbc 
brew install unixodbc

# Step2: install Microsoft ODBC Driver for SQL Server on MacOS

brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
brew update
brew install msodbcsql mssql-tools

# Step3:verify odbcinst configuration path is correct

odbcinst -j

sudo ln -s /usr/local/etc/odbcinst.ini /etc/odbcinst.ini
sudo ln -s /usr/local/etc/odbc.ini /etc/odbc.ini

【讨论】:

【参考方案5】:

我在 Python 之上构建了一个自定义图像,这是使它工作的配置:

FROM python:3.8 as pyodbc

COPY . /app
WORKDIR /app

# Required for msodbcsql17 and mssql-tools
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list
RUN apt-get update

# Key might change in the future, replace with new one on the logs
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys BA6932366A755776
RUN apt-get update
RUN apt-get install -y software-properties-common
RUN add-apt-repository ppa:deadsnakes/ppa
RUN apt-get update

RUN ACCEPT_EULA=Y apt-get install -y msodbcsql17 mssql-tools
RUN apt-get install unixodbc-dev

RUN pip install pipenv
RUN pipenv install --system --deploy

CMD [ "python" , "__init__.py"]

【讨论】:

我收到了404 Not Found [IP: 91.189.95.85 80] 对此有何想法? @MikeSchem 不是真的。也许发布一个关于您的问题的新问题并@我或链接在这里。【参考方案6】:
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > 
/etc/apt/sources.list.d/mssql-release.list 
apt-get update
ACCEPT_EULA=Y apt-get install msodbcsql17
apt-get -y install unixodbc-dev
sudo apt-get install python3-pip -y
pip3 install --upgrade pyodbc

使用上述步骤正确安装 odbc 驱动程序,一切都会到位。

【讨论】:

【参考方案7】:

我尝试从外部 (Linux) 机器与部署在 (Windows) 机器上的远程 MS SQL Server 建立连接。我花了一些时间才意识到您需要先在尝试建立连接的机器上安装驱动程序(在我的例子中是 Linux)!

如果您使用的是 macOS/Linux,您需要做的只是简单地Install the Microsoft ODBC Driver for SQL Server on Linux and macOS,然后按照您的特定操作系统的Connecting to databases 上的说明进行操作。

【讨论】:

“Microsoft ODBC Driver for SQL Server for linux/macos”链接很有帮助,谢谢【参考方案8】:

我必须补充一点,如果您使用不同的驱动程序 (FreeTDS),并且在您的连接字符串中省略提及它,它将默认为 driver='ODBC Driver 17 for SQL Server 或类似的东西。

所以解决方案是不要忘记驱动程序,您的数据库设置将如下所示: 'default': 'ENGINE': 'sql_server.pyodbc', 'HOST': '127.0.0.1', 'NAME': 'mydb', 'PORT': '1433', 'USER': 'sa', 'PASSWORD': '*****', 'OPTIONS': 'driver': 'FreeTDS', 'host_is_server': True,

【讨论】:

【参考方案9】:

我正在为类似的问题而苦苦挣扎。

首先,我关注了this instruction:

我认为错误在于我使用了驱动程序 17 而不是驱动程序 13 - 根据 Azure 门户中可见的连接字符串。

玩了很久,驱动13出现这个错误: " pyodbc.Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib '/usr/local/lib/libmsodbcsql.13.dylib' : file not found (0) (SQLDriverConnect) ") "

并收到驱动程序 17 的超时错误。

我终于在this hack找到了解决方案。问题是两个版本混淆的 OpenSSL。

我在我的 Mac 上的 VS Code 中的虚拟环境中运行该应用程序并将其部署到 Azure Web 应用程序。

【讨论】:

【参考方案10】:

在 Ubuntu 18.04 上运行的安装。我不确定是否需要两个 ./bash_profile./bashrc 导出,但我没有时间检查。

sudo apt-get update
ACCEPT_EULA=Y sudo apt-get -y install msodbcsql17 mssql-tools
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile \
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc \
sudo apt-get -y install unixodbc libc6 libstdc++6 libkrb5-3 libcurl3 openssl debconf unixodbc unixodbc-dev

然后作为连接中的驱动程序,使用与当前 Azure 版本匹配的ODBC Driver 17 for SQL Server

【讨论】:

【参考方案11】:

我知道每个人都有同样愚蠢的错误:但我提醒一下,我花了 30 分钟阅读这个分支...错误是连接字符串末尾的奇数空间

     SQLALCHEMY_DATABASE_URI: str = "mssql+pyodbc://sa:tt@localhost:1433/babylon_pacemaker?Trusted_connection = no&driver=ODBC+Driver+17+for+SQL+Server " - odd space :(

有趣的是,Alembic 运行良好,但 SQLAlchimy 出现错误。

【讨论】:

以上是关于无法打开 lib 'ODBC Driver 13 for SQL Server'?符号链接问题?的主要内容,如果未能解决你的问题,请参考以下文章

PHP 警告:odbc_connect():SQL 错误:[Microsoft][ODBC Microsoft Access Driver]一般错误无法打开临时注册表项(易失性)

无法加载 Kingbasees 8.6 odbc driver ansi odbc

如何指向手动安装 Microsoft ODBC Driver 13

由于系统错误 126 (MySQL ODBC 5.3 UNICODE Driver),指定驱动程序无法加载。

错误= [Microsoft] [SQL Server的ODBC驱动程序13]无法打开BCP主机数据文件

找不到Microsoft Access Driver(*.mdb)ODBC驱动程序的安装例程。请重新安装驱动(转)