You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Databricks连接Azure SQL报错:无法打开ODBC Driver 17 for SQL Server

解决Databricks连接Azure SQL时ODBC驱动缺失问题

问题场景

尝试用以下Python代码从Databricks连接Azure SQL数据库:

import pyodbc

# Connect to Azure SQL database
server = 'xxxx.database.windows.net'
database = 'db-dev-xxxx'
username = 'abc'
password = 'xyz'
driver= '{ODBC Driver 17 for SQL Server}'

cnxn = pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password)

执行后报错:

Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'ODBC Driver 17 for SQL Server': file not found (0) (SQLDriverConnect)")

解决步骤

1. 在Databricks集群上安装ODBC驱动17

Databricks基于Linux环境运行,需安装对应版本的ODBC驱动17:

  • 集群初始化脚本(推荐):创建bash脚本install_sql_odbc.sh,内容如下:
#!/bin/bash
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
apt-get update
ACCEPT_EULA=Y apt-get install -y msodbcsql17

将脚本上传至DBFS,在集群配置的「初始化脚本」中添加该脚本的DBFS路径(如dbfs:/scripts/install_sql_odbc.sh),重启集群即可永久生效。

  • 临时测试方案:在Databricks Notebook中运行以下命令,仅当前会话有效,集群重启后需重新执行:
%sh
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
apt-get update
ACCEPT_EULA=Y apt-get install -y msodbcsql17

2. 验证驱动安装状态

运行以下命令确认驱动是否成功安装:

%sh
odbcinst -q -d -n "ODBC Driver 17 for SQL Server"

输出包含驱动路径即表示安装成功。

3. 优化连接字符串

Linux环境下驱动名称无需加花括号,可修改代码并简化连接字符串:

import pyodbc

server = 'xxxx.database.windows.net'
database = 'db-dev-xxxx'
username = 'abc'
password = 'xyz'
driver= 'ODBC Driver 17 for SQL Server'

# 用f-string简化拼接
cnxn = pyodbc.connect(f'DRIVER={driver};SERVER={server};PORT=1433;DATABASE={database};UID={username};PWD={password}')

4. 替代方案:使用Databricks Azure SQL连接器

若不想手动管理ODBC驱动,可使用Databricks官方提供的JDBC连接器:

df = spark.read \
    .format("com.microsoft.sqlserver.jdbc.spark") \
    .option("url", f"jdbc:sqlserver://{server}:1433;databaseName={database}") \
    .option("dbtable", "目标表名") \
    .option("user", username) \
    .option("password", password) \
    .load()

使用前需在集群配置的「库」中添加Maven坐标com.microsoft.azure:spark-mssql-connector_2.12:1.2.0(或适配Spark版本的最新版本)。

内容的提问来源于stack exchange,提问作者user3459293

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 01:52:27