[本文是预发行文档,可能会有所更改。]
本文介绍使用 SDK for Python 查询 Dataverse 数据的可用方法。 可以使用结构化查询语言(SQL)和基于 OData 的 API 查询数据。
在继续阅读本文之前,Python 开发人员应先阅读 入门(预览版) 来了解适用于 Python 的 SDK。
使用 SQL 查询数据
Dataverse Web 服务的 SQL 终结点为一组有限的 SQL SELECT 命令提供只读接口。 本文介绍可用的 SELECT 查询选项。 还可以使用 Dataverse Web API 访问 SQL 终结点,因此用 Python 以外的语言编写的代码可以访问它。
重要
SQL 支持仅限于只读查询。 可能不支持复杂的联接、子查询和某些 SQL 函数。 SQL 查询必须遵循支持的子集:
- WHERE 只能是一个布尔表达式树,其中叶是二进制运算符(=、 >如等),其中一个参数是直接列引用,另一个参数是常量
- TOP 仅允许整数字面值
- ORDERBY 只能引用列,不允许任何复杂的表达式
以下示例代码演示 Python 中的 SQL 查询。
# SQL query (read-only)
results = client.query.sql(
"SELECT TOP 10 accountid, name FROM account WHERE statecode = 0"
)
for record in results:
print(record["name"])
此调用返回结果行字典的列表。 当无行匹配时,将返回空列表。
使用 OData 查询数据
可以使用 Python SDK 的 client.records API 发出 OData 查询以获取数据。
# OData query with paging
# Note: filter and expand parameters are case sensitive
for page in client.records.get(
"account",
select=["accountid", "name"], # select is case-insensitive (automatically lowercased)
filter="statecode eq 0", # filter must use lowercase logical names (not transformed)
top=100,
):
for record in page:
print(record["name"])
# Query with navigation property expansion (case-sensitive!)
for page in client.records.get(
"account",
select=["name"],
expand=["primarycontactid"], # Navigation property names are case-sensitive
filter="statecode eq 0", # Column names must be lowercase logical names
):
for account in page:
contact = account.get("primarycontactid", {})
print(f"{account['name']} - Contact: {contact.get('fullname', 'N/A')}")
编写 OData 调用时,请遵循以下准则。
-
filter对于参数,对列名使用确切的小写逻辑名称(例如“statecode eq 0”,而不是“StateCode eq 0”)。 - 对于
expand参数,请使用区分大小写的导航属性名称,以确保与服务器名称精确匹配。 - 语句
select和orderby参数不区分大小写,并自动转换为小写。