Add this skill
npx mdskills install sickn33/azure-data-tables-pyComprehensive Azure Tables reference with clear examples, but permissions over-scoped
1---2name: azure-data-tables-py3description: |4 Azure Tables SDK for Python (Storage and Cosmos DB). Use for NoSQL key-value storage, entity CRUD, and batch operations.5 Triggers: "table storage", "TableServiceClient", "TableClient", "entities", "PartitionKey", "RowKey".6package: azure-data-tables7---89# Azure Tables SDK for Python1011NoSQL key-value store for structured data (Azure Storage Tables or Cosmos DB Table API).1213## Installation1415```bash16pip install azure-data-tables azure-identity17```1819## Environment Variables2021```bash22# Azure Storage Tables23AZURE_STORAGE_ACCOUNT_URL=https://<account>.table.core.windows.net2425# Cosmos DB Table API26COSMOS_TABLE_ENDPOINT=https://<account>.table.cosmos.azure.com27```2829## Authentication3031```python32from azure.identity import DefaultAzureCredential33from azure.data.tables import TableServiceClient, TableClient3435credential = DefaultAzureCredential()36endpoint = "https://<account>.table.core.windows.net"3738# Service client (manage tables)39service_client = TableServiceClient(endpoint=endpoint, credential=credential)4041# Table client (work with entities)42table_client = TableClient(endpoint=endpoint, table_name="mytable", credential=credential)43```4445## Client Types4647| Client | Purpose |48|--------|---------|49| `TableServiceClient` | Create/delete tables, list tables |50| `TableClient` | Entity CRUD, queries |5152## Table Operations5354```python55# Create table56service_client.create_table("mytable")5758# Create if not exists59service_client.create_table_if_not_exists("mytable")6061# Delete table62service_client.delete_table("mytable")6364# List tables65for table in service_client.list_tables():66 print(table.name)6768# Get table client69table_client = service_client.get_table_client("mytable")70```7172## Entity Operations7374**Important**: Every entity requires `PartitionKey` and `RowKey` (together form unique ID).7576### Create Entity7778```python79entity = {80 "PartitionKey": "sales",81 "RowKey": "order-001",82 "product": "Widget",83 "quantity": 5,84 "price": 9.99,85 "shipped": False86}8788# Create (fails if exists)89table_client.create_entity(entity=entity)9091# Upsert (create or replace)92table_client.upsert_entity(entity=entity)93```9495### Get Entity9697```python98# Get by key (fastest)99entity = table_client.get_entity(100 partition_key="sales",101 row_key="order-001"102)103print(f"Product: {entity['product']}")104```105106### Update Entity107108```python109# Replace entire entity110entity["quantity"] = 10111table_client.update_entity(entity=entity, mode="replace")112113# Merge (update specific fields only)114update = {115 "PartitionKey": "sales",116 "RowKey": "order-001",117 "shipped": True118}119table_client.update_entity(entity=update, mode="merge")120```121122### Delete Entity123124```python125table_client.delete_entity(126 partition_key="sales",127 row_key="order-001"128)129```130131## Query Entities132133### Query Within Partition134135```python136# Query by partition (efficient)137entities = table_client.query_entities(138 query_filter="PartitionKey eq 'sales'"139)140for entity in entities:141 print(entity)142```143144### Query with Filters145146```python147# Filter by properties148entities = table_client.query_entities(149 query_filter="PartitionKey eq 'sales' and quantity gt 3"150)151152# With parameters (safer)153entities = table_client.query_entities(154 query_filter="PartitionKey eq @pk and price lt @max_price",155 parameters={"pk": "sales", "max_price": 50.0}156)157```158159### Select Specific Properties160161```python162entities = table_client.query_entities(163 query_filter="PartitionKey eq 'sales'",164 select=["RowKey", "product", "price"]165)166```167168### List All Entities169170```python171# List all (cross-partition - use sparingly)172for entity in table_client.list_entities():173 print(entity)174```175176## Batch Operations177178```python179from azure.data.tables import TableTransactionError180181# Batch operations (same partition only!)182operations = [183 ("create", {"PartitionKey": "batch", "RowKey": "1", "data": "first"}),184 ("create", {"PartitionKey": "batch", "RowKey": "2", "data": "second"}),185 ("upsert", {"PartitionKey": "batch", "RowKey": "3", "data": "third"}),186]187188try:189 table_client.submit_transaction(operations)190except TableTransactionError as e:191 print(f"Transaction failed: {e}")192```193194## Async Client195196```python197from azure.data.tables.aio import TableServiceClient, TableClient198from azure.identity.aio import DefaultAzureCredential199200async def table_operations():201 credential = DefaultAzureCredential()202203 async with TableClient(204 endpoint="https://<account>.table.core.windows.net",205 table_name="mytable",206 credential=credential207 ) as client:208 # Create209 await client.create_entity(entity={210 "PartitionKey": "async",211 "RowKey": "1",212 "data": "test"213 })214215 # Query216 async for entity in client.query_entities("PartitionKey eq 'async'"):217 print(entity)218219import asyncio220asyncio.run(table_operations())221```222223## Data Types224225| Python Type | Table Storage Type |226|-------------|-------------------|227| `str` | String |228| `int` | Int64 |229| `float` | Double |230| `bool` | Boolean |231| `datetime` | DateTime |232| `bytes` | Binary |233| `UUID` | Guid |234235## Best Practices2362371. **Design partition keys** for query patterns and even distribution2382. **Query within partitions** whenever possible (cross-partition is expensive)2393. **Use batch operations** for multiple entities in same partition2404. **Use `upsert_entity`** for idempotent writes2415. **Use parameterized queries** to prevent injection2426. **Keep entities small** — max 1MB per entity2437. **Use async client** for high-throughput scenarios244
Full transparency — inspect the skill content before installing.