无法打开库“SQL Server 的 ODBC 驱动程序 13”?符号链接问题?

2025-04-17 09:02:00
admin
原创
54
摘要:问题描述:当我尝试使用 pyodbc (在 Mac 上)连接到 SQL 服务器数据库时:import pyodbc server = '####' database = '####' username = '####@####' password = '#####' driver='{ODBC Driver...

问题描述:

当我尝试使用 pyodbc (在 Mac 上)连接到 SQL 服务器数据库时:

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] [驱动程序管理器]无法打开库'SQL Server 的 ODBC 驱动程序 13':未找到文件(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}'重新开始工作?

我最初是按照这个指南安装驱动程序的。我在 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

这解决了问题。

解决方案 2:

就我而言,我有一个 Mac OS,以下命令解决了该问题:

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

注1:您可能需要unixodbc提前安装以下msodbcsql内容mssql-tools

brew install unixodbc

注意 2:如果您还没有brewmacOS 的 Missing Package Manager,那么您可以从这里安装它: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

解决方案 3:

就我而言,我必须将pyodbc数据库驱动程序字符串更改为

driver='{ODBC Driver 17 for SQL Server}'

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

解决方案 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"]

解决方案 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,您需要做的就是在 Linux 和 macOS 上安装适用于 SQL Server 的 Microsoft ODBC 驱动程序,然后按照有关连接到特定操作系统的数据库的说明进行操作。

解决方案 8:

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

所以解决方案是不要忘记驱动程序,您的 DB 设置将如下所示:
`'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:

我也曾遇到过类似的问题。

首先,我遵循以下指示:

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

经过长时间的调试后,驱动程序 13 出现以下错误:“ pyodbc.Error: ('01000', '[01000] unixODBCCan't open lib '/usr/local/lib/libmsodbcsql.13.dylib' : file not found (0) (SQLDriverConnect)") ”

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

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

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

解决方案 10:

我只是在 python:3.7-alpine 上构建了图像

FROM python:3.7-alpine

COPY . /app/.
WORKDIR /app

# Install curl
RUN apk add --no-cache curl
RUN apk update && apk add curl

# Install the Microsoft ODBC driver Linux.Follow the mssql documentation: https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver15
RUN curl -O https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.8.1.1-1_amd64.apk
RUN curl -O https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/mssql-tools_17.8.1.1-1_amd64.apk

# Install the package(s)
RUN apk add --allow-untrusted msodbcsql17_17.8.1.1-1_amd64.apk
RUN apk add --allow-untrusted mssql-tools_17.8.1.1-1_amd64.apk

# Install other libs
RUN pip install --upgrade pip
RUN pip install -r requirements.txt

RUN apk add python3 python3-dev g++ unixodbc-dev
RUN python3 -m ensurepip
RUN pip3 install --user pyodbc

# Run script
ENTRYPOINT [ "python", "-u", "run.py"]

在代码中设置连接时,需要指定已安装的驱动程序版本。例如,在我的例子中:msdobcversion=17,因此驱动程序应该是DRIVER={ODBC Driver 17 for SQL Server}

# Make connection
server = os.environ["server"]
database = os.environ["database"]
username = os.environ["UID"]
password = os.environ["PWD"]
cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)

解决方案 11:

在 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 \necho 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc \nsudo apt-get -y install unixodbc libc6 libstdc++6 libkrb5-3 libcurl3 openssl debconf unixodbc unixodbc-dev

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

解决方案 12:

我知道每个人都有同样愚蠢的错误:但我提醒一下,我花了 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 出现错误。

解决方案 13:

谢谢 Uzzal,你的解决方案解决了我的问题:

块引用就我而言,我必须将 pyodbc 数据库驱动程序字符串更改为 driver='{ODBC Driver 17 for SQL Server}' 实际上,在我的 python 代码中,pyodbc 需要 ODBC Driver 13,但是,由于 ODBC 驱动程序版本已更新(由于 ubuntu 更新)为当前版本 ODBC Driver 17,因此出现了问题。

https://stackoverflow.com/a/48849351/7694643

这对我来说是有用的。我已将其添加为环境变量:

在此处输入图片描述

解决方案 14:

就我而言,在使用 sudo 用户运行以下命令后,我使用了 DRIVER={ODBC Driver 17 for SQL Server},这解决了我的问题。

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

解决方案 15:

Arch Linux 用户可以从 AUR 安装特定的软件包

1. aur/msodbcsql17 17.10.1.1-1 (+3 0.66) 
Microsoft® ODBC Driver 17 for SQL Server®

2. aur/msodbcsql 18.0.1.1-1 (+24 0.38)
Microsoft® ODBC Driver 18 for SQL Server®

解决方案 16:

我遇到了同样的问题,并使用以下命令进行了排序:

sudo ln -s /usr/local/etc/odbcinst.ini /etc/odbcinst.ini...
之后,如果您运行该文件,则不会出现相同的错误。

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

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   3949  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2735  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Freshdesk、ClickUp、nTask、Hubstaff、Plutio、Productive、Targa、Bonsai、Wrike。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在项目管理过程中面临着诸多痛点,如任务分配不...
项目管理系统   74  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Monday、TeamGantt、Filestage、Chanty、Visor、Smartsheet、Productive、Quire、Planview。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多项目经理和团队在管理复杂项目时,常...
开源项目管理工具   82  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Smartsheet、GanttPRO、Backlog、Visor、ResourceGuru、Productive、Xebrio、Hive、Quire。在当今快节奏的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在选择项目管理工具时常常面临困惑:...
项目管理系统   68  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用