如何用Python操作Microsoft Dataverse表CRUD及Azure AD配置步骤
使用Python操作Microsoft Dataverse的CRUD方案及配置步骤
可用方案
- 直接调用Microsoft Power Platform REST API,配合Azure AD身份认证实现CRUD
- 使用官方工具Power Platform CLI for Python(
ppython),封装了Dataverse操作逻辑 - 用
azure-identity+requests组合实现自定义调用,灵活性最高,适合大多数场景
前置配置(基于已有Azure AD应用注册)
- 登录Azure门户,进入你的应用注册页面
- API权限配置:
- 点击「API权限」→「添加权限」,搜索并选择
Dataverse - 根据业务场景选择权限类型:
- 后台服务场景选「应用权限」,推荐添加
crm.readwrite - 用户上下文场景选「委派权限」,推荐添加
user_impersonation
- 后台服务场景选「应用权限」,推荐添加
- 点击「授予管理员同意」(应用权限必须完成此步,委派权限测试时也可提前授予)
- 点击「API权限」→「添加权限」,搜索并选择
- 获取认证密钥:
- 进入「证书和密码」→「新建客户端密码」,设置过期时间后保存,务必记录密码值(仅显示一次)
- 记录关键信息:
- 租户ID(Azure AD目录ID)
- 客户端ID(应用注册的应用ID)
- 客户端密码(刚创建的密钥)
- Dataverse环境URL(格式:
https://<环境名称>.crm.dynamics.com)
代码实现(以azure-identity + requests为例)
1. 安装依赖
pip install azure-identity requests
2. 获取访问令牌(应用权限场景)
from azure.identity import ClientSecretCredential # 替换为你的实际信息 tenant_id = "xxx-xxx-xxx-xxx" client_id = "xxx-xxx-xxx-xxx" client_secret = "xxx-xxx-xxx-xxx" dataverse_url = "https://your-env.crm.dynamics.com" # 获取Dataverse访问令牌 credential = ClientSecretCredential(tenant_id, client_id, client_secret) token = credential.get_token("https://dynamicscrm.azure.net/.default") access_token = token.token
3. CRUD操作示例
读取记录(以账户表为例)
import requests headers = { "Authorization": f"Bearer {access_token}", "OData-MaxVersion": "4.0", "OData-Version": "4.0", "Accept": "application/json", "Content-Type": "application/json; charset=utf-8" } # 读取前10条账户记录 response = requests.get( f"{dataverse_url}/api/data/v9.2/accounts?$top=10", headers=headers ) response.raise_for_status() print("读取的账户数据:", response.json())
创建记录
new_account = { "name": "测试科技公司", "telephone1": "010-12345678", "address1_city": "北京" } response = requests.post( f"{dataverse_url}/api/data/v9.2/accounts", headers=headers, json=new_account ) response.raise_for_status() # 提取新建记录ID account_id = response.headers["OData-EntityId"].split("(")[1].split(")")[0] print("新建账户ID:", account_id)
更新记录
updated_data = { "name": "更新后的测试科技公司", "description": "这是一条更新后的测试账户数据" } response = requests.patch( f"{dataverse_url}/api/data/v9.2/accounts({account_id})", headers=headers, json=updated_data ) response.raise_for_status() print("账户更新成功")
删除记录
response = requests.delete( f"{dataverse_url}/api/data/v9.2/accounts({account_id})", headers=headers ) response.raise_for_status() print("账户删除成功")
其他方案说明
- Power Platform CLI for Python:官方封装工具,安装后可直接通过命令行或脚本调用内置方法,减少重复代码,适合快速开发
- 社区库
dynamicscrm-api:简化了API调用逻辑,但需注意版本兼容性,建议优先使用官方工具或原生API调用
内容的提问来源于stack exchange,提问作者AnnoNeemuse
相关产品推荐
相关产品推荐

