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

eme*_*hex 35 sql-server odbc pyodbc python-3.x anaconda

当我尝试使用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)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

错误:('01000',"[01000] [unixODBC] [驱动程序管理器]无法打开lib'用于SQL Server的ODBC驱动程序13':找不到文件(0)(SQLDriverConnect)")

当我在实际的驱动程序位置路径时:

driver='/usr/local/lib/libmsodbcsql.13.dylib'
Run Code Online (Sandbox Code Playgroud)

它开始工作了!

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
Run Code Online (Sandbox Code Playgroud)

如何让我参考driver='{ODBC Driver 13 for SQL Server}'再次开始工作?

我最初使用本指南来安装驱动程序.如果有帮助的话,我在Mac Sierra上使用anaconda?

eme*_*hex 51

运行:

odbcinst -j
Run Code Online (Sandbox Code Playgroud)

它产生了:

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
Run Code Online (Sandbox Code Playgroud)

而不是将文件复制到/etc/目录(不知道为什么unixODBC认为他们在那里)我创建了一个指向每个文件的符号链接:

sudo ln -s /usr/local/etc/odbcinst.ini /etc/odbcinst.ini
sudo ln -s /usr/local/etc/odbc.ini /etc/odbc.ini
Run Code Online (Sandbox Code Playgroud)

这解决了这个问题.

  • ln:无法创建符号链接“ /etc/odbcinst.ini”:文件存在 (12认同)
  • 这有效(虽然我必须卸载并重新安装驱动程序https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-服务器),但有一个小错字:```sudo ln -s /usr/local/etc/odbc.ini/etc/odbc.ini``` (6认同)
  • 好的解决方案-回答您的问题。unixODBC默认在/ etc中搜索`odbc.ini`和`odbcinst.ini`。它还将检查用户的主目录中的.odbc.ini和.odbcinst.ini。(作为记录,FreeTDS对于`freetds.conf` /`.freetds.conf`也是一样的。) (2认同)
  • 如果您已更新到新版本的驱动程序,也会发生此错误。如果存在文件,请检查/etc/odbcinst.ini的内容,即:$ cat /etc/odbcinst.ini [用于SQL Server的ODBC驱动程序17]说明=用于SQL Server的Microsoft ODBC驱动程序17 = / opt / microsoft / msodbcsql /lib64/libmsodbcsql-17.0.so.1.1 UsageCount = 1然后更新Scipt的内容以使用新的驱动程序。在这种情况下,驱动程序已从版本13更新到版本17。为了完整性,建议您添加此信息。 (2认同)
  • 文件存在错误意味着 odbcinst.ini 已存在于 /etc 文件夹中。将文件重命名为 odbcinst.ini_old 并再次尝试 ln -s 命令,看看是否有效 (2认同)
  • 请注意,对于 M1 mac,上述符号链接可能无效。这是因为 M1 上的 homebrew 目录是“/opt/homebrew”而不是“/usr/local”。因此,应相应调整路径。 (2认同)

Uzz*_*der 30

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

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

  • 对我有用:`driver={ODBC Driver 17 for SQL Server};` (3认同)

Ren*_* B. 18

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

brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
brew update
brew install msodbcsql mssql-tools
Run Code Online (Sandbox Code Playgroud)

  • 我还必须在连接设置中添加驱动程序详细信息`connection = pyodbc.connect(“ Driver = {用于SQL Server的ODBC驱动程序13};”“ Server = someHost;”“数据库= dbname;”“ uid = SA; pwd = passowrd“)` (2认同)
  • 几个小时后我们将进行演示,但我的程序无法在 Mac 上运行。这救了我们的命。 (2认同)

小智 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
Run Code Online (Sandbox Code Playgroud)

  • 请注意,对于 M1 mac,上述符号链接可能无效。这是因为 M1 上的 homebrew 目录是“/opt/homebrew”而不是“/usr/local”。因此,应相应调整路径。 (4认同)

Dev*_*rma 5

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
Run Code Online (Sandbox Code Playgroud)

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


Eva*_*tti 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"]
Run Code Online (Sandbox Code Playgroud)