QueryOperations Klass
Namnområde för frågeåtgärder.
Nås via client.query. Tillhandahåller fråge- och sökåtgärder mot Dataverse-tabeller.
Exempel:
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"])
Konstruktor
QueryOperations(client: DataverseClient)
Parametrar
| Name | Description |
|---|---|
|
client
Obligatorisk
|
Den överordnade DataverseClient instansen. |
Metoder
| builder |
Skapa en fluent-frågebyggare för den angivna tabellen. Returnerar en QueryBuilder som kan länkas med filter-, select- och ordermetoder och sedan köras direkt via |
| fetchxml |
Returnera ett inert-objekt FetchXmlQuery . Ingen HTTP-begäran görs förrän execute eller execute_pages anropas på det returnerade objektet. Använd för SQL-JOIN scenarier, aggregerade frågor eller andra åtgärder som OData builder-slutpunkten inte kan uttrycka. Exempel:
|
| odata_bind |
Skapa en Identifierar navigeringsegenskapens namn och entitetsuppsättningsnamn automatiskt från metadata. Returnerar en diktering med en enda post som kan sammanfogas till en nyttolast för att skapa eller uppdatera. Exempel:
|
| odata_expand |
Returnera namnet på navigeringsegenskapen till Identifierar via relationsmetadata. Returnerar den exakta PascalCase-strängen för parametern Exempel:
|
| odata_expands |
Identifiera alla Returnerar poster för varje utgående sökning (envärdesnavigeringsegenskap). Varje post innehåller det exakta namnet på den PascalCase-navigeringsegenskap som behövs för Exempel:
|
| odata_select |
Returnera en lista med logiska kolumnnamn som är lämpliga för Kan skickas direkt till Exempel:
|
| sql |
Kör en skrivskyddad SQL-fråga med hjälp av Dataverse Web API. Dataverse SQL-slutpunkten stöder en bred delmängd av T-SQL:
Stöds inte: SELECT >>*<<, subqueries, CTE, HAVING, UNION, RIGHT/FULL/CROSS JOIN, CASE, COALESCE, window functions, string/date/math functions, INSERT/UPDATE/DELETE. Använd metoder för skrivningar |
| sql_columns |
Returnera en förenklad lista över SQL-användbara kolumner för en tabell. Varje diktat innehåller Exempel:
|
builder
Skapa en fluent-frågebyggare för den angivna tabellen.
Returnerar en QueryBuilder som kan länkas med filter-, select- och ordermetoder och sedan köras direkt via .execute().
builder(table: str) -> QueryBuilder
Parametrar
| Name | Description |
|---|---|
|
table
Obligatorisk
|
Tabellschemanamn (t.ex. |
Returer
| Typ | Description |
|---|---|
|
En QueryBuilder-instans som är bunden till den här klienten. |
Exempel
Skapa och köra en fråga flytande:
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"])
Med skrivbart uttrycksträd:
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
Returnera ett inert-objekt FetchXmlQuery .
Ingen HTTP-begäran görs förrän execute eller execute_pages anropas på det returnerade objektet.
Använd för SQL-JOIN scenarier, aggregerade frågor eller andra åtgärder som OData builder-slutpunkten inte kan uttrycka.
Exempel:
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
Parametrar
| Name | Description |
|---|---|
|
xml
Obligatorisk
|
Välformulerad FetchXML-frågesträng.
|
Returer
| Typ | Description |
|---|---|
|
Inert-frågeobjekt med |
Undantag
| Typ | Description |
|---|---|
|
Om FetchXML saknar ett rotelement |
odata_bind
Skapa en @odata.bind post för att ange ett uppslagsfält.
Identifierar navigeringsegenskapens namn och entitetsuppsättningsnamn automatiskt från metadata. Returnerar en diktering med en enda post som kan sammanfogas till en nyttolast för att skapa eller uppdatera.
Exempel:
# 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]
Parametrar
| Name | Description |
|---|---|
|
from_table
Obligatorisk
|
Schemanamn för entiteten som skapas/uppdateras. |
|
to_table
Obligatorisk
|
Schemanamn för målentiteten som sökningen pekar på. |
|
target_id
Obligatorisk
|
GUID för målposten. |
Returer
| Typ | Description |
|---|---|
|
En dikt som |
Undantag
| Typ | Description |
|---|---|
|
Om det inte finns någon relation mellan tabellerna. |
odata_expand
Returnera namnet på navigeringsegenskapen till $expand från en tabell till en annan.
Identifierar via relationsmetadata. Returnerar den exakta PascalCase-strängen för parametern expand= .
Exempel:
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
Parametrar
| Name | Description |
|---|---|
|
from_table
Obligatorisk
|
Schemanamn för källtabellen (t.ex. |
|
to_table
Obligatorisk
|
Schemanamn för måltabellen (t.ex. |
Returer
| Typ | Description |
|---|---|
|
Namnet på navigeringsegenskapen (PascalCase). |
Undantag
| Typ | Description |
|---|---|
|
Om ingen navigeringsegenskap hittades för målet. |
odata_expands
Identifiera alla $expand navigeringsegenskaper från en tabell.
Returnerar poster för varje utgående sökning (envärdesnavigeringsegenskap). Varje post innehåller det exakta namnet på den PascalCase-navigeringsegenskap som behövs för $expand och @odata.bind, plus målentitetsuppsättningens namn.
Exempel:
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]]
Parametrar
| Name | Description |
|---|---|
|
table
Obligatorisk
|
Schemanamn för tabellen (t.ex. |
Returer
| Typ | Description |
|---|---|
|
Lista över dikteringar, var och en med:
|
odata_select
Returnera en lista med logiska kolumnnamn som är lämpliga för $select.
Kan skickas direkt till client.records.get(table, select=...).
Exempel:
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]
Parametrar
| Name | Description |
|---|---|
|
table
Obligatorisk
|
Schemanamn för tabellen (t.ex. |
|
include_system
Obligatorisk
|
Inkludera systemkolumner (standard |
Keyword-Only parametrar
| Name | Description |
|---|---|
|
include_system
|
Standardvärde: False
|
Returer
| Typ | Description |
|---|---|
|
Lista över logiska gemener med kolumnnamn. |
sql
Kör en skrivskyddad SQL-fråga med hjälp av Dataverse Web API.
Dataverse SQL-slutpunkten stöder en bred delmängd av 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 * stöds inte – ange kolumnnamn explicit.
Använd sql_columns för att identifiera tillgängliga kolumnnamn för en tabell.
Stöds inte: SELECT >>*<<, subqueries, CTE, HAVING, UNION, RIGHT/FULL/CROSS JOIN, CASE, COALESCE, window functions, string/date/math functions, INSERT/UPDATE/DELETE. Använd metoder för skrivningar client.records .
sql(sql: str) -> List[Record]
Parametrar
| Name | Description |
|---|---|
|
sql
Obligatorisk
|
SQL SELECT-instruktion som stöds. |
Returer
| Typ | Description |
|---|---|
|
Record Lista över objekt. Returnerar en tom lista när inga rader matchar. |
Undantag
| Typ | Description |
|---|---|
|
Om |
Exempel
Grundläggande fråga:
rows = client.query.sql(
"SELECT TOP 10 name FROM account ORDER BY name"
)
ANSLUT med aggregering:
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
Returnera en förenklad lista över SQL-användbara kolumner för en tabell.
Varje diktat innehåller name (logiskt namn för SQL), type (Dataverse-attributtyp), is_pk (primär nyckelflagga) och label (visningsnamn). Virtuella kolumner undantas alltid eftersom SQL-slutpunkten inte kan köra frågor mot dem.
Exempel:
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]]
Parametrar
| Name | Description |
|---|---|
|
table
Obligatorisk
|
Schemanamn för tabellen (t.ex. |
|
include_system
Obligatorisk
|
När |
Keyword-Only parametrar
| Name | Description |
|---|---|
|
include_system
|
Standardvärde: False
|
Returer
| Typ | Description |
|---|---|
|
Lista över kolumnmetadatadiktor. |