You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* add upload feature
* consolidate to one upload_file method
* updated comment about upload method
* updates per comments
* minor format fixes
---------
Co-authored-by: Max Wang <zhaodongwang@microsoft.com>
Copy file name to clipboardExpand all lines: README.md
+17Lines changed: 17 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,6 +7,7 @@ A minimal Python SDK to use Microsoft Dataverse as a database for Azure AI Found
7
7
- Bulk create — Pass a list of records to `create(...)` to invoke the bound `CreateMultiple` action; returns `list[str]` of GUIDs. If any payload omits `@odata.type` the SDK resolves and stamps it (cached).
8
8
- Bulk update — Provide a list of IDs with a single patch (broadcast) or a list of per‑record patches to `update(...)`; internally uses the bound `UpdateMultiple` action; returns nothing. Each record must include the primary key attribute when sent to UpdateMultiple.
9
9
- Retrieve multiple (paging) — Generator-based `get_multiple(...)` that yields pages, supports `$top` and Prefer: `odata.maxpagesize` (`page_size`).
10
+
- Upload files — Call `upload_file(entity_set, ...)` and a upload method will be auto picked (user can also overwrite the upload mode). See https://learn.microsoft.com/en-us/power-apps/developer/data-platform/file-column-data?tabs=sdk#upload-files
@@ -19,6 +20,7 @@ A minimal Python SDK to use Microsoft Dataverse as a database for Azure AI Found
19
20
- Bulk create via `CreateMultiple` (collection-bound) by passing `list[dict]` to `create(entity_set, payloads)`; returns list of created IDs.
20
21
- Bulk update via `UpdateMultiple` (invoked internally) by calling unified `update(entity_set, ids, patch|patches)`; returns nothing.
21
22
- Retrieve multiple with server-driven paging: `get_multiple(...)` yields lists (pages) following `@odata.nextLink`. Control total via `$top` and per-page via `page_size` (Prefer: `odata.maxpagesize`).
23
+
- Upload files, using either a single request (supports file size up to 128 MB) or chunk upload under the hood
22
24
- Optional pandas integration (`PandasODataClient`) for DataFrame based create / get / query.
23
25
24
26
Auth:
@@ -103,6 +105,8 @@ The quickstart demonstrates:
103
105
- Retrieve multiple with paging (`$top` vs `page_size`)
104
106
- Executing a read-only SQL query (Web API `?sql=`)
105
107
108
+
For upload files functionalities, run quickstart_file_upload.py instead
109
+
106
110
## Examples
107
111
108
112
### DataverseClient (recommended)
@@ -196,6 +200,19 @@ Bulk create notes:
196
200
- Single-record `create` returns a one-element list of GUIDs.
197
201
- Metadata lookup for `@odata.type` is performed once per entity set (cached in-memory).
- upload_file picks one of the three methods to use based on file size: if file is less than 128 MB uses upload_file_small, otherwise uses upload_file_chunk
214
+
- upload_file_small makes a single Web API call and only supports file size < 128 MB
215
+
- upload_file_chunk uses PATCH with Content-Range to upload the file (more aligned with HTTP standard compared to Dataverse messages). It consists of 2 stages 1. PATCH request to get the headers used for actual upload. 2. Actual upload in chunks. It uses x-ms-chunk-size returned in the first stage to determine chunk size (normally 4 MB), and use Content-Range and Content-Length as metadata for the upload. Total number of Web API calls is number of chunks + 1
0 commit comments