无法为SQL Server打开lib' ODBC驱动程序13'? Sym链接问题?

时间:2017-06-13 16:58:02

标签: sql-server python-3.x odbc anaconda pyodbc

当我尝试使用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] [驱动程序管理器]无法打开用于SQL Server的lib' 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}'再次开始工作?

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

10 个答案:

答案 0 :(得分:42)

跑步:

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

这解决了这个问题。

答案 1 :(得分:24)

在我的情况下,我必须将pyodbc数据库驱动程序字符串更改为
driver='{ODBC Driver 17 for SQL Server}'

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

答案 2 :(得分:8)

对于我来说,我有一个Mac OS,并且以下命令解决了该问题:

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

答案 3 :(得分:5)

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

# 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

答案 4 :(得分:4)

我正在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"]

答案 5 :(得分:2)

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驱动程序,一切都会就绪。

答案 6 :(得分:1)

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

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

答案 7 :(得分:0)

我必须补充一点,如果您使用的是其他驱动程序(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, } }

答案 8 :(得分:0)

可在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

答案 9 :(得分:0)

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