首页 > 解决方案 > unixODBC 在 Mac 上失败,“[IM004] [unixODBC][Driver Manager]Driver's SQLAllocHandle on SQL_HANDLE_HENV failed”

问题描述

我正在尝试从运行 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

所有帮助表示赞赏。

标签: macosodbc

解决方案


我已经解决了这个问题。

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

所需的资源文件是 msodbcsqlr17.rll,根据文档: https ://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/install-microsoft-odbc-driver-sql-server- macos?view=sql-server-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

问题就解决了。


推荐阅读