unixODBC 在 mac 上失败,"[IM004] [unixODBC][Driver Manager]Driver's SQLAllocHandle on SQL_HANDLE_HENV fa



我正试图从运行macOS 11.0.1的ARM mac连接到Microsoft SQL服务器。

我已经设置了一个安装了miniconda的conda环境,并在Jupyter笔记本电脑中运行:

import pyodbc
conn = pyodbc.connect('Driver={ODBC Driver 17 for SQL Server};Server=xxx;Database=xxx;uid=xxx;pwd=xxx;')
Error: ('IM004', "[IM004] [unixODBC][Driver Manager]Driver's SQLAllocHandle on SQL_HANDLE_HENV failed (0) (SQLDriverConnect)")

运行odbcinst-j并没有显示出明显的问题。我认为问题出在我的环境中:

$ odbcinst -j
unixODBC 2.3.9
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /Users/johnmorgan/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
$ more /etc/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
[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/usr/local/lib/libmsodbcsql.17.dylib
UsageCount=1

我的$PATH是:

$ tr ':' 'n' <<< "$PATH"
/opt/anaconda3/envs/analysis/bin
/opt/miniconda3/bin
/opt/anaconda3/condabin
/Users/johnmorgan/anaconda3/bin
/Users/johnmorgan/anaconda3/bin
/Users/johnmorgan/anaconda2/bin
/Users/johnmorgan/anaconda/bin
//anaconda/bin
/Users/johnmorgan/anaconda/bin
/opt/local/bin
/opt/local/sbin
/Applications/anaconda/bin
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/opt/X11/bin
/Library/Apple/usr/bin
/Applications/Sublime Text.app/Contents/SharedSupport/bin

感谢所有的帮助。

我已经解决了这个问题。

根据此评论,错误通常是由于缺少资源文件造成的:https://github.com/mkleehammer/pyodbc/issues/738

根据文档,所需的资源文件是msodbcsqlr17.rll:https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/install-microsoft-odbc-driver-sql-server-macos?view=sql-服务器-ver15

该文档指出资源文件应位于:/usr/local/share/msodbcsql17/resources/en_US

(或者可能是一个不同的位置,相对于驱动程序文件的位置,请参阅上面的文档链接(

由于某种原因,我的资源文件丢失了。

我通过在以下位置检查自制配方找到了一份副本:https://github.com/microsoft/homebrew-mssql-release/blob/master/Formula/msodbcsql17%4017.1.0.1.rb

其中包含下载链接:https://download.microsoft.com/download/1/9/A/19AF548A-6DD3-4B48-88DC-724E9ABCEB9A/msodbcsql-17.1.0.1.tar.gz

在压缩包中有一个msodbcsqlr17.rll 的副本

我将其复制到/usr/local/share/msodbcsql17/resources/en_US

问题解决了。

相关内容

最新更新