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 .execute().

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())
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_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_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_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)
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_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']}")

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
str

Tabellschemanamn (t.ex. "account").

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
str

Välformulerad FetchXML-frågesträng. <entity name="..."> Rotelementet avgör slutpunkten för entitetsuppsättningen.

Returer

Typ Description

Inert-frågeobjekt med .execute() och .execute_pages() metoder.

Undantag

Typ Description

Om FetchXML saknar ett rotelement <entity> eller entitetsattributet name .

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
str

Schemanamn för entiteten som skapas/uppdateras.

to_table
Obligatorisk
str

Schemanamn för målentiteten som sökningen pekar på.

target_id
Obligatorisk
str

GUID för målposten.

Returer

Typ Description

En dikt som {"NavProp@odata.bind": "/entityset(guid)"}.

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
str

Schemanamn för källtabellen (t.ex. "contact").

to_table
Obligatorisk
str

Schemanamn för måltabellen (t.ex. "account").

Returer

Typ Description
str

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
str

Schemanamn för tabellen (t.ex. "contact").

Returer

Typ Description

Lista över dikteringar, var och en med:

  • nav_property – PascalCase-navigeringsegenskap för $expand

  • target_table – logiska målentitetsnamn

  • target_entity_set – målentitetsuppsättning (för @odata.bind)

  • lookup_attribute – det logiska namnet på uppslagskolumnen

  • relationship – namn på relationsschema

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
str

Schemanamn för tabellen (t.ex. "account").

include_system
Obligatorisk

Inkludera systemkolumner (standard False).

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
str

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 sql inte är en sträng eller är tom.

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
str

Schemanamn för tabellen (t.ex. "account").

include_system
Obligatorisk

När False (standard) undantas kolumner som slutar med vanliga systemsuffix (_base, , versionnumbertimezoneruleversionnumber, utcconversiontimezonecode, importsequencenumber, overriddencreatedon) .

Keyword-Only parametrar

Name Description
include_system
Standardvärde: False

Returer

Typ Description

Lista över kolumnmetadatadiktor.