无法在 python 中打开 lib“ODBC Driver 17 for SQL Server”

Bij*_*dra 6 python sql-server odbc sqlalchemy pyodbc

我正在使用 python 脚本连接到远程 MSSql 服务器。我在 OSX m/c 中安装了所需的库,并尝试使用 python shell 连接,但操作失败。MSSql 未安装在我的开发计算机本地。

Python shell:
>>> cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
pyodbc.Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'ODBC Driver 17 for SQL Server' : file not found (0) (SQLDriverConnect)")
>>> 
Run Code Online (Sandbox Code Playgroud)

odbcinst.ini 的内容

[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/usr/local/lib/libmsodbcsql.17.dylib
Run Code Online (Sandbox Code Playgroud)

驱动程序的文件参考,它存在。

lrwxr-xr-x    1 biju  admin      56 Mar 23 07:57 libmsodbcsql.17.dylib -> ../Cellar/msodbcsql17/17.5.2.1/lib/libmsodbcsql.17.dylib
Run Code Online (Sandbox Code Playgroud)

直接在驱动程序中使用文件路径,代码可以工作。

在 /etc/odbcinst.ini 中又找到了一个 odbcinst 文件

[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)

上述路径 /usr/local/lib/libmsodbcsql.13.dylib 中不存在文件。我不确定这两个版本的库是否已正确安装或是否必须删除。

Wil*_*ing 4

我遇到了同样的问题,我通过将ODBCSYSINI环境变量设置为指向包含的目录来修复它odbcinst.ini- 在我的例子中是/opt/odbc.

export ODBCSYSINI=/opt/odbc
Run Code Online (Sandbox Code Playgroud)

请注意,环境变量必须指向包含文件的目录odbcinst.ini,而不是文件本身

确保在调用 Python 代码的脚本或 shell 中设置环境变量。

  • 谢谢威尔,这是正确的答案,应该如此标记。 (2认同)