QueryOperations Sınıf

Sorgu işlemleri için ad alanı.

client.query aracılığıyla erişilir. Dataverse tablolarında sorgu ve arama işlemleri sağlar.

Example:


   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"])

Oluşturucu

QueryOperations(client: DataverseClient)

Parametreler

Name Description
client
Gerekli

Üst DataverseClient örnek.

Yöntemler

builder

Belirtilen tablo için akıcı bir sorgu oluşturucu oluşturun.

Filtre, seçme ve sıralama yöntemleriyle zincirlenebilen, ardından doğrudan aracılığıyla .execute()yürütülebilen bir QueryBuilder döndürür.

fetchxml

Bir eylemsiz FetchXmlQuery nesne döndürür.

Döndürülen nesnede çağrılana kadar veya execute_pages çağrılana kadar execute HTTP isteği yapılmaz.

OData builder uç noktasının ifade edemeyeceği SQL-JOIN senaryolar, toplu sorgular veya diğer işlemler için kullanın.

Example:


   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

@odata.bind Arama alanı ayarlamak için bir girdi oluşturun.

Meta verilerden gezinti özellik adını ve varlık kümesi adını otomatik olarak bulur. Oluşturma veya güncelleştirme yüküyle birleştirilebilen tek girişli bir dikte döndürür.

Example:


   # 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

Gezinti özelliği adını $expand bir tablodan diğerine döndür.

İlişki meta verileri aracılığıyla bulur. parametresi için tam PascalCase dizesini expand= döndürür.

Example:


   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

Tablodan tüm $expand gezinti özelliklerini keşfedin.

Her giden arama için girdileri döndürür (tek değerli gezinti özelliği). Her girdi ve için $expand gereken tam PascalCase gezinti özelliği adını ve @odata.bindhedef varlık kümesi adını içerir.

Example:


   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

için $selectuygun sütun mantıksal adlarının listesini döndürür.

doğrudan öğesine client.records.get(table, select=...)geçirilebilir.

Example:


   cols = client.query.odata_select("account")
   for page in client.records.get("account", select=cols, top=10):
       for r in page:
           print(r)
sql

Dataverse Web API'sini kullanarak salt okunur bir SQL sorgusu yürütür.

Dataverse SQL uç noktası, T-SQL'in geniş bir alt kümesini destekler:


   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 * desteklenmez; sütun adlarını açıkça belirtin. Bir tablonun kullanılabilir sütun adlarını bulmak için kullanın sql_columns .

Desteklenmez: SELECT >>*<<, alt sorgular, CTE, HAVING, UNION, RIGHT/FULL/CROSS JOIN, CASE, COALESCE, window functions, string/date/math functions, INSERT/UPDATE/DELETE. Yazma işlemleri için yöntemleri kullanın client.records .

sql_columns

Bir tablo için SQL tarafından kullanılabilir sütunların basitleştirilmiş bir listesini döndürür.

Her dikte (SQL için mantıksal ad), type (Dataverse öznitelik türü), is_pk (birincil anahtar bayrağı) ve label (görünen ad) bulunur name . SQL uç noktası bunları sorgulayamayacağından sanal sütunlar her zaman dışlanır.

Example:


   cols = client.query.sql_columns("account")
   for c in cols:
       print(f"{c['name']:30s} {c['type']:20s} PK={c['is_pk']}")

builder

Belirtilen tablo için akıcı bir sorgu oluşturucu oluşturun.

Filtre, seçme ve sıralama yöntemleriyle zincirlenebilen, ardından doğrudan aracılığıyla .execute()yürütülebilen bir QueryBuilder döndürür.

builder(table: str) -> QueryBuilder

Parametreler

Name Description
table
Gerekli
str

Tablo şeması adı (örn. "account").

Döndürülenler

Tür Description

Bu istemciye bağlı bir QueryBuilder örneği.

Örnekler

Sorguyu akıcı bir şekilde derleme ve yürütme:


   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"])

Birleştirilebilir ifade ağacıyla:


   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

Bir eylemsiz FetchXmlQuery nesne döndürür.

Döndürülen nesnede çağrılana kadar veya execute_pages çağrılana kadar execute HTTP isteği yapılmaz.

OData builder uç noktasının ifade edemeyeceği SQL-JOIN senaryolar, toplu sorgular veya diğer işlemler için kullanın.

Example:


   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

Parametreler

Name Description
xml
Gerekli
str

İyi biçimlendirilmiş FetchXML sorgu dizesi. Kök <entity name="..."> öğesi varlık kümesi uç noktasını belirler.

Döndürülenler

Tür Description

ve .execute_pages() yöntemleriyle .execute() sorgu nesnesi ekle.

Özel durumlar

Tür Description

FetchXML'de kök <entity> öğe veya varlık name özniteliği eksikse.

odata_bind

@odata.bind Arama alanı ayarlamak için bir girdi oluşturun.

Meta verilerden gezinti özellik adını ve varlık kümesi adını otomatik olarak bulur. Oluşturma veya güncelleştirme yüküyle birleştirilebilen tek girişli bir dikte döndürür.

Example:


   # 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]

Parametreler

Name Description
from_table
Gerekli
str

Oluşturulan/güncelleştirilen varlığın şema adı.

to_table
Gerekli
str

Aramanın işaret olduğu hedef varlığın şema adı.

target_id
Gerekli
str

Hedef kaydın GUID'i.

Döndürülenler

Tür Description

gibi {"NavProp@odata.bind": "/entityset(guid)"}bir dikte.

Özel durumlar

Tür Description

Tablolar arasında ilişki bulunamazsa.

odata_expand

Gezinti özelliği adını $expand bir tablodan diğerine döndür.

İlişki meta verileri aracılığıyla bulur. parametresi için tam PascalCase dizesini expand= döndürür.

Example:


   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

Parametreler

Name Description
from_table
Gerekli
str

Kaynak tablonun şema adı (örn. "contact").

to_table
Gerekli
str

Hedef tablonun şema adı (örn. "account").

Döndürülenler

Tür Description
str

Gezinti özelliği adı (PascalCase).

Özel durumlar

Tür Description

Hedef için gezinti özelliği bulunamazsa.

odata_expands

Tablodan tüm $expand gezinti özelliklerini keşfedin.

Her giden arama için girdileri döndürür (tek değerli gezinti özelliği). Her girdi ve için $expand gereken tam PascalCase gezinti özelliği adını ve @odata.bindhedef varlık kümesi adını içerir.

Example:


   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]]

Parametreler

Name Description
table
Gerekli
str

Tablonun şema adı (örn. "contact").

Döndürülenler

Tür Description

Her biri şu şekilde olan diktelerin listesi:

  • nav_property – $expand için PascalCase gezinti özelliği

  • target_table – hedef varlık mantıksal adı

  • target_entity_set – hedef varlık kümesi (için @odata.bind)

  • lookup_attribute – arama sütunu mantıksal adı

  • relationship – ilişki şeması adı

odata_select

için $selectuygun sütun mantıksal adlarının listesini döndürür.

doğrudan öğesine client.records.get(table, select=...)geçirilebilir.

Example:


   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]

Parametreler

Name Description
table
Gerekli
str

Tablonun şema adı (örn. "account").

include_system
Gerekli

Sistem sütunlarını dahil et (varsayılan False).

Yalnızca Anahtar Sözcük Parametreleri

Name Description
include_system
Default value: False

Döndürülenler

Tür Description

Küçük harfli sütun mantıksal adlarının listesi.

sql

Dataverse Web API'sini kullanarak salt okunur bir SQL sorgusu yürütür.

Dataverse SQL uç noktası, T-SQL'in geniş bir alt kümesini destekler:


   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 * desteklenmez; sütun adlarını açıkça belirtin. Bir tablonun kullanılabilir sütun adlarını bulmak için kullanın sql_columns .

Desteklenmez: SELECT >>*<<, alt sorgular, CTE, HAVING, UNION, RIGHT/FULL/CROSS JOIN, CASE, COALESCE, window functions, string/date/math functions, INSERT/UPDATE/DELETE. Yazma işlemleri için yöntemleri kullanın client.records .

sql(sql: str) -> List[Record]

Parametreler

Name Description
sql
Gerekli
str

Desteklenen SQL SELECT deyimi.

Döndürülenler

Tür Description

Nesnelerin listesi Record . Satır eşleşmediğinde boş bir liste döndürür.

Özel durumlar

Tür Description

Dize değilse veya boşsa sql .

Örnekler

Temel sorgu:


   rows = client.query.sql(
       "SELECT TOP 10 name FROM account ORDER BY name"
   )

Toplama ile JOIN:


   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

Bir tablo için SQL tarafından kullanılabilir sütunların basitleştirilmiş bir listesini döndürür.

Her dikte (SQL için mantıksal ad), type (Dataverse öznitelik türü), is_pk (birincil anahtar bayrağı) ve label (görünen ad) bulunur name . SQL uç noktası bunları sorgulayamayacağından sanal sütunlar her zaman dışlanır.

Example:


   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]]

Parametreler

Name Description
table
Gerekli
str

Tablonun şema adı (örn. "account").

include_system
Gerekli

(varsayılan) olduğunda False , yaygın sistem sonekleri (_base, versionnumber, timezoneruleversionnumber, , utcconversiontimezonecode, importsequencenumberoverriddencreatedon) ile biten sütunlar dışlanır.

Yalnızca Anahtar Sözcük Parametreleri

Name Description
include_system
Default value: False

Döndürülenler

Tür Description

Sütun meta verisi diktelerinin listesi.