QueryOperations Classe
Namespace para operações de consulta.
Acedido via client.query. Fornece operações de consulta e pesquisa contra tabelas Dataverse.
Exemplo:
from PowerPlatform.Dataverse.models.filters import col
client = DataverseClient(base_url, credential)
# Fluent query builder (recommended)
for record in (client.query.builder("account")
.select("name", "revenue")
.where(col("statecode") == 0)
.order_by("revenue", descending=True)
.top(100)
.execute()):
print(record["name"])
# SQL query
rows = client.query.sql("SELECT TOP 10 name FROM account ORDER BY name")
for row in rows:
print(row["name"])
Construtor
QueryOperations(client: DataverseClient)
Parâmetros
| Name | Description |
|---|---|
|
client
Necessário
|
A instância principal DataverseClient . |
Métodos
| builder |
Crie um construtor de consultas fluente para a tabela especificada. Retorna um QueryBuilder que pode ser encadeado com métodos filtro, select e order, e depois executado diretamente via |
| fetchxml |
Devolva um objeto inerte FetchXmlQuery . Nenhum pedido HTTP é feito até execute ou execute_pages é chamado no objeto devolvido. Use para SQL-JOIN cenários, consultas agregadas ou outras operações que o endpoint OData builder não consiga expressar. Exemplo:
|
| odata_bind |
Crie uma Descobre automaticamente o nome da propriedade de navegação e o nome do conjunto de entidades a partir dos metadados. Devolve um dicto de entrada única que pode ser fundido numa carga útil de criar ou atualizar. Exemplo:
|
| odata_expand |
Devolva o nome da propriedade de navegação de Descobre através dos metadados da relação. Devolve a cadeia exata de PascalCase para o Exemplo:
|
| odata_expands |
Descubra todas as Retorna entradas para cada consulta de saída (propriedade de navegação de valor único). Cada entrada contém o nome exato da propriedade de navegação PascalCase necessário para Exemplo:
|
| odata_select |
Devolva uma lista de nomes lógicos de colunas adequada para Pode ser passada diretamente para Exemplo:
|
| sql |
Execute uma consulta SQL apenas de leitura usando a API Web do Dataverse. O endpoint SQL do Dataverse suporta um amplo subconjunto do T-SQL:
Não suportado: SELECT >>*<<, subqueries, CTE, HAVING, UNION, RIGHT/FULL/CROSS JOIN, CASE, COALESCE, funções janela, string/date/math, INSERT/UPDATE/DELETE. Para escritas, usa |
| sql_columns |
Devolva uma lista simplificada de colunas utilizáveis em SQL para uma tabela. Cada dict contém Exemplo:
|
builder
Crie um construtor de consultas fluente para a tabela especificada.
Retorna um QueryBuilder que pode ser encadeado com métodos filtro, select e order, e depois executado diretamente via .execute().
builder(table: str) -> QueryBuilder
Parâmetros
| Name | Description |
|---|---|
|
table
Necessário
|
Nome do esquema da tabela (por exemplo, |
Devoluções
| Tipo | Description |
|---|---|
|
Uma instância QueryBuilder vinculada a este cliente. |
Exemplos
Construa e execute uma consulta de forma fluida:
from PowerPlatform.Dataverse.models.filters import col
for record in (client.query.builder("account")
.select("name", "revenue")
.where(col("statecode") == 0)
.where(col("revenue") > 1_000_000)
.order_by("revenue", descending=True)
.top(100)
.page_size(50)
.execute()):
print(record["name"])
Com árvore de expressões componível:
from PowerPlatform.Dataverse.models.filters import col
for record in (client.query.builder("account")
.where((col("statecode") == 0) | (col("statecode") == 1))
.where(col("revenue") > 100_000)
.execute()):
print(record["name"])
fetchxml
Devolva um objeto inerte FetchXmlQuery .
Nenhum pedido HTTP é feito até execute ou execute_pages é chamado no objeto devolvido.
Use para SQL-JOIN cenários, consultas agregadas ou outras operações que o endpoint OData builder não consiga expressar.
Exemplo:
query = client.query.fetchxml("""
<fetch top="50">
<entity name="account">
<attribute name="name" />
<link-entity name="contact" from="parentcustomerid"
to="accountid" alias="c" link-type="inner">
<attribute name="fullname" />
</link-entity>
</entity>
</fetch>
""")
# Eager — collect all pages:
result = query.execute()
df = result.to_dataframe()
# Lazy — process one page at a time:
for page in query.execute_pages():
process(page.to_dataframe())
fetchxml(xml: str) -> FetchXmlQuery
Parâmetros
| Name | Description |
|---|---|
|
xml
Necessário
|
String de consulta FetchXML bem formada. O elemento raiz |
Devoluções
| Tipo | Description |
|---|---|
|
Objeto de consulta inerte com |
Exceções
| Tipo | Description |
|---|---|
|
Se o FetchXML estiver em falta de um elemento raiz |
odata_bind
Crie uma @odata.bind entrada para definir um campo de pesquisa.
Descobre automaticamente o nome da propriedade de navegação e o nome do conjunto de entidades a partir dos metadados. Devolve um dicto de entrada única que pode ser fundido numa carga útil de criar ou atualizar.
Exemplo:
# Instead of manually constructing:
# {"parentcustomerid_account@odata.bind": "/accounts(guid)"}
# Just do:
bind = client.query.odata_bind("contact", "account", acct_id)
client.records.create("contact", {
"firstname": "Jane",
"lastname": "Doe",
**bind,
})
odata_bind(from_table: str, to_table: str, target_id: str) -> Dict[str, str]
Parâmetros
| Name | Description |
|---|---|
|
from_table
Necessário
|
Nome do esquema da entidade a ser criada/atualizada. |
|
to_table
Necessário
|
Nome do esquema da entidade-alvo para a qual a consulta aponta. |
|
target_id
Necessário
|
GUID do registo alvo. |
Devoluções
| Tipo | Description |
|---|---|
|
Um ditto como |
Exceções
| Tipo | Description |
|---|---|
|
Se não for encontrada relação entre as tabelas. |
odata_expand
Devolva o nome da propriedade de navegação de $expand uma tabela para outra.
Descobre através dos metadados da relação. Devolve a cadeia exata de PascalCase para o expand= parâmetro.
Exemplo:
nav = client.query.odata_expand("contact", "account")
# Returns e.g. "parentcustomerid_account"
for page in client.records.get("contact",
select=["fullname"],
expand=[nav],
top=5):
for r in page:
acct = r.get(nav) or {}
print(f"{r['fullname']} -> {acct.get('name', 'N/A')}")
odata_expand(from_table: str, to_table: str) -> str
Parâmetros
| Name | Description |
|---|---|
|
from_table
Necessário
|
Nome do esquema da tabela fonte (por exemplo, |
|
to_table
Necessário
|
Nome do esquema da tabela alvo (por exemplo, |
Devoluções
| Tipo | Description |
|---|---|
|
O nome da propriedade de navegação (PascalCase). |
Exceções
| Tipo | Description |
|---|---|
|
Se não for encontrada nenhuma propriedade de navegação para o alvo. |
odata_expands
Descubra todas as $expand propriedades de navegação a partir de uma tabela.
Retorna entradas para cada consulta de saída (propriedade de navegação de valor único). Cada entrada contém o nome exato da propriedade de navegação PascalCase necessário para $expand e @odata.bind, mais o nome do conjunto de entidade-alvo.
Exemplo:
expands = client.query.odata_expands("contact")
for e in expands:
print(f"expand={e['nav_property']} -> {e['target_table']}")
# Use in a query
e = next(e for e in expands if e['target_table'] == 'account')
for page in client.records.get("contact",
select=["fullname"],
expand=[e['nav_property']]):
...
odata_expands(table: str) -> List[Dict[str, Any]]
Parâmetros
| Name | Description |
|---|---|
|
table
Necessário
|
Nome do esquema da tabela (por exemplo, |
Devoluções
| Tipo | Description |
|---|---|
|
Lista de ditados, cada um com:
|
odata_select
Devolva uma lista de nomes lógicos de colunas adequada para $select.
Pode ser passada diretamente para client.records.get(table, select=...).
Exemplo:
cols = client.query.odata_select("account")
for page in client.records.get("account", select=cols, top=10):
for r in page:
print(r)
odata_select(table: str, *, include_system: bool = False) -> List[str]
Parâmetros
| Name | Description |
|---|---|
|
table
Necessário
|
Nome do esquema da tabela (por exemplo, |
|
include_system
Necessário
|
Incluir colunas do sistema (por defeito |
Parâmetros Só de Palavra-Chave
| Name | Description |
|---|---|
|
include_system
|
Default value: False
|
Devoluções
| Tipo | Description |
|---|---|
|
Lista de nomes lógicos em colunas minúsculas. |
sql
Execute uma consulta SQL apenas de leitura usando a API Web do Dataverse.
O endpoint SQL do Dataverse suporta um amplo subconjunto do T-SQL:
SELECT / SELECT DISTINCT / SELECT TOP N (0-5000)
FROM table [alias]
INNER JOIN / LEFT JOIN (multi-table, no depth limit)
WHERE (=, !=, >, <, >=, <=, LIKE, IN, NOT IN, IS NULL,
IS NOT NULL, BETWEEN, AND, OR, nested parentheses)
GROUP BY column
ORDER BY column [ASC|DESC]
OFFSET n ROWS FETCH NEXT m ROWS ONLY
COUNT(*), SUM(), AVG(), MIN(), MAX()
SELECT * não é suportado – especifique explicitamente os nomes das colunas.
Use sql_columns para descobrir os nomes das colunas disponíveis para uma tabela.
Não suportado: SELECT >>*<<, subqueries, CTE, HAVING, UNION, RIGHT/FULL/CROSS JOIN, CASE, COALESCE, funções janela, string/date/math, INSERT/UPDATE/DELETE. Para escritas, usa client.records métodos.
sql(sql: str) -> List[Record]
Parâmetros
| Name | Description |
|---|---|
|
sql
Necessário
|
Instrução SQL SELECT suportada. |
Devoluções
| Tipo | Description |
|---|---|
|
Lista de Record objetos. Devolve uma lista vazia quando nenhuma linha corresponde. |
Exceções
| Tipo | Description |
|---|---|
|
Se |
Exemplos
Consulta básica:
rows = client.query.sql(
"SELECT TOP 10 name FROM account ORDER BY name"
)
JUNTE-SE com agregação:
rows = client.query.sql(
"SELECT a.name, COUNT(c.contactid) as cnt "
"FROM account a "
"JOIN contact c ON a.accountid = c.parentcustomerid "
"GROUP BY a.name"
)
sql_columns
Devolva uma lista simplificada de colunas utilizáveis em SQL para uma tabela.
Cada dict contém name (nome lógico para SQL), type (tipo de atributo Dataverse), is_pk (flag de chave primária) e label (nome de exibição). As colunas virtuais são sempre excluídas porque o endpoint SQL não as pode consultar.
Exemplo:
cols = client.query.sql_columns("account")
for c in cols:
print(f"{c['name']:30s} {c['type']:20s} PK={c['is_pk']}")
sql_columns(table: str, *, include_system: bool = False) -> List[Dict[str, Any]]
Parâmetros
| Name | Description |
|---|---|
|
table
Necessário
|
Nome do esquema da tabela (por exemplo, |
|
include_system
Necessário
|
Quando |
Parâmetros Só de Palavra-Chave
| Name | Description |
|---|---|
|
include_system
|
Default value: False
|
Devoluções
| Tipo | Description |
|---|---|
|
Lista de ditos de metadados das colunas. |