QueryOperations クラス
クエリ操作の名前空間。
client.query経由でアクセスされます。 Dataverse テーブルに対するクエリ操作と検索操作を提供します。
例:
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"])
メソッド
| builder |
指定したテーブルの Fluent クエリ ビルダーを作成します。 フィルター、選択、および順序付けメソッドでチェーン可能な QueryBuilder を返し、 |
| fetchxml |
不活性な FetchXmlQuery オブジェクトを返します。 返されたオブジェクトに対して execute または execute_pages が呼び出されるまで、HTTP 要求は行われません。 OData ビルダー エンドポイントで表現できない SQL-JOIN シナリオ、集計クエリ、またはその他の操作に使用します。 例:
|
| odata_bind |
ルックアップ フィールドを設定するための メタデータからナビゲーション プロパティ名とエンティティ セット名を自動検出します。 作成または更新のペイロードにマージできる単一エントリのディクテーションを返します。 例:
|
| odata_expand |
あるテーブルから別のテーブルに リレーションシップ メタデータを使用して検出します。
例:
|
| odata_expands |
テーブルからすべての 各送信ルックアップ (単一値ナビゲーション プロパティ) のエントリを返します。 各エントリには、 例:
|
| odata_select |
例:
|
| sql |
Dataverse Web API を使用して読み取り専用 SQL クエリを実行します。 Dataverse SQL エンドポイントは、T-SQL の広範なサブセットをサポートしています。
サポートされていません:SELECT >>*<<、サブクエリ、CTE、HAVING、UNION、RIGHT/FULL/CROSS JOIN、CASE、COALESCE、ウィンドウ関数、文字列/日付/数学関数、INSERT/UPDATE/DELETE。 書き込みの場合は、 |
| sql_columns |
テーブルに対して SQL で使用できる列の簡略化された一覧を返します。 各 dict には、 例:
|
builder
指定したテーブルの Fluent クエリ ビルダーを作成します。
フィルター、選択、および順序付けメソッドでチェーン可能な QueryBuilder を返し、 .execute()を介して直接実行します。
builder(table: str) -> QueryBuilder
パラメーター
| 名前 | 説明 |
|---|---|
|
table
必須
|
テーブル スキーマ名 (例: |
返品
| 型 | 説明 |
|---|---|
|
このクライアントにバインドされた QueryBuilder インスタンス。 |
例
クエリを fluently にビルドして実行します。
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"])
構成可能な式ツリーの場合:
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
不活性な FetchXmlQuery オブジェクトを返します。
返されたオブジェクトに対して execute または execute_pages が呼び出されるまで、HTTP 要求は行われません。
OData ビルダー エンドポイントで表現できない SQL-JOIN シナリオ、集計クエリ、またはその他の操作に使用します。
例:
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
パラメーター
| 名前 | 説明 |
|---|---|
|
xml
必須
|
整形式の FetchXML クエリ文字列。 ルート |
返品
| 型 | 説明 |
|---|---|
|
|
例外
| 型 | 説明 |
|---|---|
|
FetchXML にルート |
odata_bind
ルックアップ フィールドを設定するための @odata.bind エントリを作成します。
メタデータからナビゲーション プロパティ名とエンティティ セット名を自動検出します。 作成または更新のペイロードにマージできる単一エントリのディクテーションを返します。
例:
# 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]
パラメーター
| 名前 | 説明 |
|---|---|
|
from_table
必須
|
作成または更新されるエンティティのスキーマ名。 |
|
to_table
必須
|
参照先のターゲット エンティティのスキーマ名。 |
|
target_id
必須
|
ターゲット レコードの GUID。 |
返品
| 型 | 説明 |
|---|---|
|
|
例外
| 型 | 説明 |
|---|---|
|
テーブル間にリレーションシップが見つからない場合。 |
odata_expand
あるテーブルから別のテーブルに $expand するナビゲーション プロパティ名を返します。
リレーションシップ メタデータを使用して検出します。
expand= パラメーターの正確な PascalCase 文字列を返します。
例:
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
パラメーター
| 名前 | 説明 |
|---|---|
|
from_table
必須
|
ソース テーブルのスキーマ名 (例: |
|
to_table
必須
|
ターゲット テーブルのスキーマ名 (例: |
返品
| 型 | 説明 |
|---|---|
|
ナビゲーション プロパティ名 (PascalCase)。 |
例外
| 型 | 説明 |
|---|---|
|
ターゲットのナビゲーション プロパティが見つからない場合。 |
odata_expands
テーブルからすべての $expand ナビゲーション プロパティを検出します。
各送信ルックアップ (単一値ナビゲーション プロパティ) のエントリを返します。 各エントリには、 $expand と @odata.bindに必要な正確な PascalCase ナビゲーション プロパティ名と、ターゲット エンティティ セット名が含まれます。
例:
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]]
パラメーター
| 名前 | 説明 |
|---|---|
|
table
必須
|
テーブルのスキーマ名 (例: |
返品
| 型 | 説明 |
|---|---|
|
ディクテーションの一覧。それぞれ以下が含まれます。
|
odata_select
$selectに適した列論理名の一覧を返します。
client.records.get(table, select=...)に直接渡すことができます。
例:
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]
パラメーター
| 名前 | 説明 |
|---|---|
|
table
必須
|
テーブルのスキーマ名 (例: |
|
include_system
必須
|
システム列を含める (既定の |
キーワードのみのパラメーター
| 名前 | 説明 |
|---|---|
|
include_system
|
規定値: False
|
返品
| 型 | 説明 |
|---|---|
|
小文字の列論理名の一覧。 |
sql
Dataverse Web API を使用して読み取り専用 SQL クエリを実行します。
Dataverse SQL エンドポイントは、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 * はサポートされていません。列名を明示的に指定してください。
sql_columnsを使用して、テーブルで使用可能な列名を検出します。
サポートされていません:SELECT >>*<<、サブクエリ、CTE、HAVING、UNION、RIGHT/FULL/CROSS JOIN、CASE、COALESCE、ウィンドウ関数、文字列/日付/数学関数、INSERT/UPDATE/DELETE。 書き込みの場合は、 client.records メソッドを使用します。
sql(sql: str) -> List[Record]
パラメーター
| 名前 | 説明 |
|---|---|
|
sql
必須
|
サポートされている SQL SELECT ステートメント。 |
返品
| 型 | 説明 |
|---|---|
|
Record オブジェクトの一覧。 行が一致しない場合は空のリストを返します。 |
例外
| 型 | 説明 |
|---|---|
|
|
例
基本的なクエリ:
rows = client.query.sql(
"SELECT TOP 10 name FROM account ORDER BY name"
)
集計を使用した 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
テーブルに対して SQL で使用できる列の簡略化された一覧を返します。
各 dict には、 name (SQL の論理名)、 type (Dataverse 属性の種類)、 is_pk (主キー フラグ)、および label (表示名) が含まれています。 SQL エンドポイントはクエリを実行できないため、仮想列は常に除外されます。
例:
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]]
パラメーター
| 名前 | 説明 |
|---|---|
|
table
必須
|
テーブルのスキーマ名 (例: |
|
include_system
必須
|
|
キーワードのみのパラメーター
| 名前 | 説明 |
|---|---|
|
include_system
|
規定値: False
|
返品
| 型 | 説明 |
|---|---|
|
列メタデータ のディクテーションの一覧。 |