通过


查询数据(预览版)

[本文是预发行文档,可能会有所更改。]

本文介绍使用 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参数,请使用区分大小写的导航属性名称,以确保与服务器名称精确匹配。
  • 语句 selectorderby 参数不区分大小写,并自动转换为小写。

另请参阅