我的环境
跑步
import pyodbc
server = 'myserver.database.windows.net'
database = 'mydb'
username = 'myuser'
password = 'mypassword'
odbc_driver = '{ODBC Driver 18 for SQL Server}'
conn_str = (
f"Driver={odbc_driver};"
f"Server=tcp:{server},1433;"
f"Database={database};"
f"Uid={username};"
f"Pwd={password};"
"Encrypt=yes;"
"TrustServerCertificate=no;"
"Connection Timeout=30;")
print(conn_str)
cnxn = pyodbc.connect(conn_str)
输出
Driver={ODBC Driver 18 for SQL Server};Server=tcp:myserver.database.windows.net,1433;Database=mydb;Uid=myuser;Pwd=mypassword;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;
Traceback (most recent call last):
File "/Users/....", line 21, in <module>
cnxn = pyodbc.connect(conn_str)
pyodbc.Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'ODBC Driver 18 for SQL Server' : file not found (0) (SQLDriverConnect)")
在 isql 中使用相同的连接字符串:
isql -v -k "Driver={ODBC Driver 18 for SQL Server};Server=tcp:<server>,1433;Database=<db>;Uid=<user>;Pwd=<pw>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;"
退货
Connected
并且可以查询
驱动程序在我的机器上,我先尝试使用
ODBC Driver 17 for SQL Server
,然后安装ODBC Driver 18 for SQL Server
,结果相同。
我该如何解决这个问题?还创建了一个 GitHub 问题 here
错误:('01000',“[01000] [unixODBC][驱动程序管理器]无法打开 lib “SQL Server 的 ODBC 驱动程序 17”:找不到文件 (0) (SQLDriverConnect)”)
根据上述错误驱动程序正确未安装。但是,对于
ODBC Driver 17 for SQL server
,请按照官方文档在MacOS上安装Microsoft ODBC Driver for SQL Server。
解决错误的另一种方法,检查您的驱动程序是否安装,然后按照驱动程序路径进行操作 示例 : "/user/local/lib/libmsodbcsql.17.dylib" ,替换 驱动程序值,如下面的代码所示。
cnxn = pyodbc.connect('DRIVER={/user/local/lib/libmsodbcsql.17.dylib};SERVER=ServerName,1433;DATABASE=DatabaseName;UID=Username;PWD=password')
参考:
/bin/bash -c "$(curl -fsSL
https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-
mssql-release
brew update
brew install [email protected] [email protected]
这些命令完全适用于 MacOS。您可以在这里查看 https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/install-microsoft-odbc-driver-sql-server-macos?view=sql-server-ver16
TL;博士
尝试按照此答案本地安装 Homebrew https://stackoverflow.com/a/65383601/2103431。另外,请确保先卸载所有 msodbcsq 驱动程序、mssql-tools 和 unixodbc。通过这样做,您的 Homebrew 安装将进入文件夹
/opt/homebrew/
并防止任何复杂的链接问题。
如何检查Homebrew是否有问题?
Microsoft 说明链接了
odbcinst.ini
和 odbc.ini
文件。此外,您已尝试更改 odbc.ini
和 odbcinst.ini
中的条目以指向您确定存在驱动程序的可执行版本的位置,但这没有帮助。检查lib文件是否可执行的命令:
$ ls -la /usr/local/lib/libmsodbcsql.17.dylib
lrwxr-xr-x 1 localadmin admin 64 7 4 16:38 /usr/local/lib/libmsodbcsql.17.dylib -> /usr/local/Cellar/msodbcsql17/17.1.0.1/lib/libmsodbcsql.17.dylib
odbcinst -j
时,输出中的文件引用以 /Users/<your_username>/
或 /usr/local/
开头。$ odbcinst -j
unixODBC 2.3.12
DRIVERS............: /Users/<your_username>/.Homebrew/<more_dirs>/odbcinst.ini
SYSTEM DATA SOURCES: /Users/<your_username>/.Homebrew/<more_dirs>/odbc.ini
FILE DATA SOURCES..: /Users/<your_username>/.Homebrew/<more_dirs>/ODBCDataSources
USER DATA SOURCES..: /Users/<your_username/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
如何知道问题出在Python之外?
使用 CLI
isql
客户端测试数据库连接。
isql -v -k 'DRIVER={ODBC Driver <driver_version/13/17/18> for SQL Server};SERVER=<server_name>.database.windows.net;PORT=1443;DATABASE=<db_name>;UID=<db_user>;PWD=<db_pass>'
使用
isql
应该会产生与 Python 脚本相同的错误。
[01000][unixODBC][Driver Manager]Can't open lib '/Users/Konstantin.Grigorov/Desktop/libmsodbcsql.17.dylib' : file not found
[ISQL]ERROR: Could not SQLDriverConnect
解决方案:
如果满足上述所有条件,很可能您的问题是您在 Apple M1 Max 芯片上使用 Homebrew,并且需要在本机安装它。 完成 Homebrew 重新安装后,您可以检查
isql
是否能够连接到数据库。
要使 Python 脚本正常工作,您可能需要使用 Homebrew 重新安装 Python。我会选择 Python 3.11 版本。
安装 pyodbc 库时,请使用
--no-binary
标志。
pip install --no-binary :all: pyodbc