M1 Mac下用SQLAlchemy连接Azure SQL数据库遇驱动错误求助
解决Azure SQL Server连接时的pyodbc.InterfaceError问题
核心问题定位
你的代码存在语法错误,导致连接字符串构造失败,这是引发错误的主要原因。此外需确认ODBC驱动配置的有效性。
步骤1:修正代码中的语法错误
你当前的代码将urllib.parse.quote_plus函数本身赋值给了params,而非执行函数后的编码字符串。修正后的代码如下:
import urllib.parse from sqlalchemy import create_engine # 正确调用quote_plus函数,确保括号与函数名关联 params = urllib.parse.quote_plus( 'Driver={ODBC Driver 18 for SQL Server};Server=tcp:test-server.database.windows.net,1433;Database=test-database;Uid=*****;Pwd=*****;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;' ) conn_str = 'mssql+pyodbc:///?odbc_connect={}'.format(params) engine_azure = create_engine(conn_str, echo=True) connection = engine_azure.connect()
步骤2:确保ODBC驱动配置被正确读取
根据odbcinst -j的输出,unixODBC默认读取/etc/odbcinst.ini和/etc/odbc.ini,符号链接可能存在权限或失效问题,建议直接复制配置文件:
sudo cp /opt/homebrew/etc/odbcinst.ini /etc/odbcinst.ini sudo cp /opt/homebrew/etc/odbc.ini /etc/odbc.ini
复制完成后,重新注册驱动:
odbcinst -i -d -f /etc/odbcinst.ini
步骤3:验证驱动名称匹配
确保连接字符串中的驱动名称{ODBC Driver 18 for SQL Server}与odbcinst.ini中的[ODBC Driver 18 for SQL Server]完全一致(包括大小写、空格)。若仍有问题,可直接指定驱动路径替代名称:
params = urllib.parse.quote_plus( 'Driver=/opt/homebrew/lib/libmsodbcsql.18.dylib;Server=tcp:test-server.database.windows.net,1433;Database=test-database;Uid=*****;Pwd=*****;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;' )
内容的提问来源于stack exchange,提问作者wholt
相关产品推荐
相关产品推荐

