Azure Databricks中pyodbc连接SQL Server提示找不到ODBC驱动17的问题
解决Azure Databricks中ODBC驱动找不到的问题
1. 修正集群初始化脚本的Ubuntu源版本
Databricks多数Runtime版本使用的是Ubuntu 18.04或20.04,你当前脚本用的是Ubuntu 16.04的源,可能导致驱动安装失败。替换成对应版本的源,修改后的初始化脚本如下:
#!/bin/bash # 确认Ubuntu版本后替换对应源,这里以18.04为例,若为20.04则改为20.04 curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - curl https://packages.microsoft.com/config/ubuntu/18.04/prod.list > /etc/apt/sources.list.d/mssql-release.list apt-get update -y ACCEPT_EULA=Y apt-get install -y msodbcsql17 apt-get -y install unixodbc-dev apt-get install -y python3-pip pip3 install --upgrade pyodbc
修改后重新上传脚本,重启集群使脚本生效。
2. 验证驱动是否成功安装
集群重启后,在Notebook中运行以下命令检查已安装的ODBC驱动:
odbcinst -q -d
如果输出包含[ODBC Driver 17 for SQL Server],说明驱动安装成功;若未出现,查看集群的初始化日志,排查安装过程中的报错(比如网络问题导致包下载失败)。
3. 调整连接字符串的驱动配置
如果驱动已安装但仍报错,尝试两种调整方式:
方式一:使用驱动的绝对路径
先通过以下命令找到驱动的实际路径:
find / -name "libmsodbcsql-17.so" 2>/dev/null
得到路径后(通常为/usr/lib/x86_64-linux-gnu/libmsodbcsql-17.so),修改连接字符串:
connect_string = f"DRIVER={driver_path};" connect_string += f"SERVER={jdbchostname},{jdbcport};" connect_string += f"DATABASE={db};" connect_string += f"UID={username};" connect_string += f"PWD={pwd}" conn = pyodbc.connect(connect_string) cursor = conn.cursor()
方式二:核对驱动名称的拼写
确保驱动名称和实际安装的完全一致,部分环境中驱动名称严格为{ODBC Driver 17 for SQL Server}(注意空格和大小写),若之前的名称有误,修正后重试。
4. 替代方案:使用Databricks内置JDBC连接
如果ODBC方式仍有问题,可以改用Databricks自带的SQL Server JDBC驱动,无需手动安装驱动:
df = spark.read.jdbc( url=f"jdbc:sqlserver://{jdbchostname}:{jdbcport};databaseName={db}", table="your_target_table", properties={ "user": username, "password": pwd, "driver": "com.microsoft.sqlserver.jdbc.SQLServerDriver" } )
这种方式更稳定,适合大多数Databricks环境。
内容的提问来源于stack exchange,提问作者Sivaani
相关产品推荐
相关产品推荐

