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

如何在Azure Databricks工作区安装ODBC Driver 17 for SQL Server并连接Azure SQL

在Azure Databricks中安装ODBC Driver 17 for SQL Server并连接Azure SQL Server

一、安装ODBC Driver 17 for SQL Server

Azure Databricks基于Ubuntu系统运行,需通过系统级命令安装ODBC驱动,有两种安装方式:

1. 集群级持久化安装(推荐)

此方式安装后,集群重启依然生效,适合长期使用场景:

  • 编写初始化脚本(命名为install_odbc.sh):
    #!/bin/bash
    sudo apt-get update
    sudo apt-get install -y msodbcsql17 unixodbc-dev
    
  • 将脚本上传至DBFS(例如路径dbfs:/scripts/install_odbc.sh)
  • 进入集群配置页面,在初始化脚本模块添加该脚本路径,保存后重启集群即可完成持久化安装。

2. 笔记本临时安装(仅当前会话有效)

若仅需临时使用驱动,可在笔记本中直接运行以下命令:

%sh
sudo apt-get update
sudo apt-get install -y msodbcsql17 unixodbc-dev

二、修正连接Azure SQL Server的代码

你的原始代码存在驱动名称不完整、未处理数据库已存在的情况、未考虑Azure SQL创建数据库的异步延迟等问题,以下是修正后的完整代码:

%python
%pip install pyodbc
dbutils.library.restartPython()
import pyodbc
import time

# Azure SQL连接配置
server = '<服务器名称>.database.windows.net'  # 需添加Azure SQL完整后缀
database = 'master'
username = 'admin_1'
password = 'test&123'
driver = 'ODBC Driver 17 for SQL Server'  # 使用完整驱动名称

# 构建连接字符串
connection_string = f'DRIVER={driver};SERVER={server};PORT=1433;DATABASE={database};UID={username};PWD={password}'

# 建立与master数据库的连接
conn = pyodbc.connect(connection_string)
cursor = conn.cursor()

# 创建新数据库(先检查是否已存在)
new_db_name = 'NewDatabase'
cursor.execute("SELECT name FROM sys.databases WHERE name = ?", new_db_name)
if not cursor.fetchone():
    cursor.execute(f"CREATE DATABASE {new_db_name}")
    conn.commit()
    print(f"数据库 {new_db_name} 创建成功!")
    # Azure SQL创建数据库为异步操作,需等待几秒再连接
    time.sleep(10)
else:
    print(f"数据库 {new_db_name} 已存在,无需重复创建。")

# 连接到新创建的数据库
connection_string_new_db = f'DRIVER={driver};SERVER={server};PORT=1433;DATABASE={new_db_name};UID={username};PWD={password}'
conn_new_db = pyodbc.connect(connection_string_new_db)
print(f"成功连接到数据库 {new_db_name}!")

# 关闭所有连接
cursor.close()
conn.close()
conn_new_db.close()

三、关键注意事项

  • 网络访问:确保Azure Databricks集群的网络可访问Azure SQL Server,例如配置VNet对等、将集群IP添加至SQL Server防火墙白名单。
  • 驱动名称:必须使用完整名称ODBC Driver 17 for SQL Server,简写会导致驱动查找失败。
  • SQL注入防护:对于用户可控的参数,建议使用参数化查询(如代码中检查数据库存在的语句),避免直接拼接SQL字符串。
  • 异步延迟:Azure SQL创建数据库为异步操作,创建后需等待几秒再尝试连接,否则会出现连接失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 22:34:59