macos - 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
所有帮助表示赞赏。
解决方案
我已经解决了这个问题。
根据此评论,错误通常是由于缺少资源文件: 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
在压缩包中有一份 msodbcsqlr17.rll
我将此复制到 /usr/local/share/msodbcsql17/resources/en_US
问题就解决了。
推荐阅读
- python - 使用一段时间后代码无法正常工作:尝试:循环
- c# - 如何针对列表优化列表查询
- python-3.x - 解释 Simple PID python 的各个部分
- doctrine-orm - 学说名称转换配置
- python - “带有广播和布尔掩码的精美索引”如何工作?
- macos - SHELL:如果 DIRECTORY 在过去 10 分钟内被修改,则退出脚本
- java - Gradle:如果我将依赖项从“实现”更改为“运行时”并且项目仍然可以编译,会不会有问题?
- ios - 如何在情节提要中看到绘图?
- java - 服务器返回 java.io.IOException:服务器返回 HTTP 响应代码:URL 为 400
- r - 按日期计算值的数量