如何通过Python Notebook直连MS Fabric Warehouse加载数据并解决认证问题
连接MS Fabric Warehouse的Python无交互认证方案
核心依赖安装
首先确保安装所需包:
pip install pyodbc azure-identity
同时需安装ODBC Driver 18 for SQL Server,Windows可直接下载安装,Linux/macOS通过对应包管理器安装(如Ubuntu用apt install msodbcsql18)。
无交互认证方案(Service Principal)
针对开发库的通用场景,推荐使用Azure AD服务主体(Service Principal)认证,无需浏览器或Azure CLI,支持代码配置参数:
1. 准备认证信息
- 在Azure AD注册应用,获取
tenant_id、client_id、client_secret。 - 在Fabric工作区中,为该服务主体分配Warehouse Contributor或更高权限。
2. 通用代码示例
以下代码支持通过变量配置工作区、仓库及认证信息:
import pyodbc from azure.identity import ClientSecretCredential import os # 可配置参数(建议从环境变量读取敏感信息) TENANT_ID = os.getenv("FABRIC_TENANT_ID") CLIENT_ID = os.getenv("FABRIC_CLIENT_ID") CLIENT_SECRET = os.getenv("FABRIC_CLIENT_SECRET") WORKSPACE_NAME = "your-workspace-name" WAREHOUSE_NAME = "your-warehouse-name" # 数据库格式为「工作区名.仓库名」 DATABASE_NAME = f"{WORKSPACE_NAME}.{WAREHOUSE_NAME}" # 服务器地址可从Fabric仓库的「连接」面板复制 SERVER = "tcp:xxx.fabric.microsoft.com,1433" # 获取Azure AD访问令牌 credential = ClientSecretCredential( tenant_id=TENANT_ID, client_id=CLIENT_ID, client_secret=CLIENT_SECRET ) token = credential.get_token("https://database.windows.net/.default") # 构造ODBC连接字符串 conn_str = f""" DRIVER={{ODBC Driver 18 for SQL Server}}; SERVER={SERVER}; DATABASE={DATABASE_NAME}; UID=unused; PWD={token.token}; Encrypt=yes; TrustServerCertificate=no; Connection Timeout=30; Authentication=ActiveDirectoryServicePrincipal """ # 执行SQL查询 with pyodbc.connect(conn_str) as conn: with conn.cursor() as cursor: # 示例:查询表数据 cursor.execute("SELECT TOP 5 * FROM your_schema.your_table") for row in cursor.fetchall(): print(row) # 示例:加载数据(假设data为DataFrame) # from pandas import DataFrame # data.to_sql("target_table", conn, schema="your_schema", if_exists="append", index=False)
关键注意事项
- 令牌有效期约1小时,长期运行的脚本需定期调用
credential.get_token()刷新令牌。 - 敏感信息(如
client_secret)禁止硬编码,务必通过环境变量、密钥 vault 等方式管理。 - 若遇到权限错误,检查服务主体在Fabric工作区的权限配置,确保能访问目标仓库。
内容的提问来源于stack exchange,提问作者Radovan Jankovic
相关产品推荐
相关产品推荐

