azure-data-tables-py
microsoft/skills
Enthält Code-Beispiele und bewährte Verfahren für die Verwendung des Azure Tables SDK für Python zur Durchführung von NoSQL-Schlüssel-Wert-Speicherung, CRUD-Operationen für Entitäten, Batch-Vorgängen und Abfragen in Azure Storage Tables oder der Cosmos DB Table API.
...Alle erweiternAzure Tables SDK für Python
NoSQL-Schlüssel-Wert-Speicher für strukturierte Daten (Azure Storage Tables oder Cosmos DB Table API).
Installation
pip install azure-data-tables azure-identity
Umgebungsvariablen
# Azure Storage Tables
AZURE_STORAGE_ACCOUNT_URL=https://.table.core.windows.net # Erforderlich für Azure Storage Tables
# Cosmos DB Table API
COSMOS_TABLE_ENDPOINT=https://.table.cosmos.azure.com # Erforderlich für Cosmos DB Table API
AZURE_TOKEN_CREDENTIALS=prod # Nur erforderlich, wenn „DefaultAzureCredential“ in der Produktion verwendet wird
Authentifizierung und Lebenszyklus
🔑 Für alle folgenden Code-Beispiele gelten zwei Regeln:
- Verwenden Sie vorzugsweise
„DefaultAzureCredential“. Es funktioniert lokal (Azure CLI / VS Code / Developer CLI) und in Azure (verwaltete Identität, Workload-Identität) ohne Codeänderungen. Vermeiden Sie Verbindungszeichenfolgen, Konto- und API-Schlüssel – diese umgehen die Entra-Überwachung und -Rotation.
- Lokale Entwicklung:
„DefaultAzureCredential“funktioniert unverändert.- Produktion: Setzen Sie
AZURE_TOKEN_CREDENTIALS=prod(oderAZURE_TOKEN_CREDENTIALS=), um die Anmeldeinformationskette auf produktionssichere Anmeldeinformationen zu beschränken.- Hüllen Sie jeden Client in einen Kontextmanager, damit HTTP-Transporte, Sockets und Token-Caches deterministisch freigegeben werden:
- Synchron:
mit `(...)` als Client: - Asynchron:
async mitund(...) als Client: async mit DefaultAzureCredential() als Anmeldeinformationen:(ausazure.identity.aio)Code-Schnipsel können diese Konfiguration zwar verkürzen, aber Produktionscode sollte stets beide Regeln befolgen.
import os
from azure.identity import DefaultAzureCredential, ManagedIdentityCredential
from azure.data.tables import TableServiceClient, TableClient
# Lokale Entwicklung: DefaultAzureCredential. Produktion: setze AZURE_TOKEN_CREDENTIALS=prod oder AZURE_TOKEN_CREDENTIALS=
credential = DefaultAzureCredential(require_envvar=True)
# Oder verwenden Sie in der Produktion direkt eine bestimmte Anmeldeinformation:
# Siehe https://learn.microsoft.com/python/api/overview/azure/identity-readme?view=azure-python#credential-classes
# credential = ManagedIdentityCredential()
endpoint = "https://.table.core.windows.net"
# Service-Client (Tabellen verwalten)
with TableServiceClient(endpoint=endpoint, credential=credential) as service_client:
# Verwenden Sie „service_client“ hier (Operationen siehe folgende Abschnitte)
...
# Tabellen-Client (Arbeiten mit Entitäten)
with TableClient(endpoint=endpoint, table_name="mytable", credential=credential) as table_client:
# Verwenden Sie hier `table_client` (Operationen siehe folgende Abschnitte)
...
Client-Typen
| Client | Zweck |
|---|---|
TableServiceClient |
Tabellen erstellen/löschen, Tabellen auflisten |
TableClient |
CRUD-Operationen für Entitäten, Abfragen |
Tabellenoperationen
# Tabelle erstellen
service_client.create_table("mytable")
# Erstellen, falls nicht vorhanden
service_client.create_table_if_not_exists("mytable")
# Tabelle löschen
service_client.delete_table("mytable")
# Tabellen auflisten
for table in service_client.list_tables():
print(table.name)
# Tabellen-Client abrufen
table_client = service_client.get_table_client("mytable")
Entitätsoperationen
Wichtig: Jede Entität benötigt einen PartitionKey und einen RowKey (die zusammen eine eindeutige ID bilden).
Entität erstellen
entity = {
"PartitionKey": "sales",
"RowKey": "order-001",
"product": "Widget",
"quantity": 5,
"price": 9.99,
"shipped": False
}
# Anlegen (schlägt fehl, wenn bereits vorhanden)
table_client.create_entity(entity=entity)
# Upsert (anlegen oder ersetzen)
table_client.upsert_entity(entity=entity)
Entität abrufen
# Nach Schlüssel abrufen (am schnellsten)
entity = table_client.get_entity(
partition_key="sales",
row_key="order-001"
)
print(f"Produkt: {entity['product']}")
Entität aktualisieren
# Gesamte Entität ersetzen
entity["quantity"] = 10
table_client.update_entity(entity=entity, mode="replace")
# Zusammenführen (nur bestimmte Felder aktualisieren)
update = {
"PartitionKey": "sales",
"RowKey": "order-001",
"shipped": True
}
table_client.update_entity(entity=update, mode="merge")
Entität löschen
table_client.delete_entity(
partition_key="sales",
row_key="order-001"
)
Entitäten abfragen
Abfrage innerhalb einer Partition
# Abfrage nach Partition (effizient)
entities = table_client.query_entities(
query_filter="PartitionKey eq 'sales'"
)
for entity in entities:
print(entity)
Abfrage mit Filtern
# Nach Eigenschaften filtern
entities = table_client.query_entities(
query_filter="PartitionKey eq 'sales' and quantity gt 3"
)
# Mit Parametern (sicherer)
entities = table_client.query_entities(
query_filter="PartitionKey eq @pk and price lt @max_price",
parameters={"pk": "sales", "max_price": 50.0}
)
Bestimmte Eigenschaften auswählen
entities = table_client.query_entities(
query_filter="PartitionKey eq 'sales'",
select=["RowKey", "product", "price"]
)
Alle Entitäten auflisten
# Alle auflisten (partitionsübergreifend – nur sparsam einsetzen)
for entity in table_client.list_entities():
print(entity)
Batch-Operationen
from azure.data.tables import TableTransactionError
# Batch-Operationen (nur innerhalb derselben Partition!)
operations = [
("create", {"PartitionKey": "batch", "RowKey": "1", "data": "first"}),
("create", {"PartitionKey": "batch", "RowKey": "2", "data": "second"}),
("upsert", {"PartitionKey": "batch", "RowKey": "3", "data": "third"}),
]
try:
table_client.submit_transaction(operations)
except TableTransactionError as e:
print(f"Transaktion fehlgeschlagen: {e}")
Asynchroner Client
from azure.data.tables.aio import TableServiceClient, TableClient
from azure.identity.aio import DefaultAzureCredential
async def table_operations():
async with DefaultAzureCredential() as credential:
async with TableClient(
endpoint="https://.table.core.windows.net",
table_name="mytable",
credential=credential
) as client:
# Erstellen
await client.create_entity(entity={
"PartitionKey": "async",
"RowKey": "1",
"data": "test"
})
# Abfrage
async for entity in client.query_entities("PartitionKey eq 'async'"):
print(entity)
import asyncio
asyncio.run(table_operations())
Datentypen
| Python-Typ | Tabellenspeichertyp |
|---|---|
str |
Zeichenkette |
int |
Int64 |
float |
Double |
bool |
Boolescher Wert |
Datum und Uhrzeit |
DateTime |
Bytes |
Binär |
UUID |
GUID |
Bewährte Vorgehensweisen
- Entscheiden Sie sich für „sync“ ODER „async“ und bleiben Sie dabei. Mischen Sie keine
„azure.data.tables“-Sync-Clients mit„azure.data.tables.aio“-Async-Clients im selben Aufrufpfad. Wählen Sie pro Modul einen Modus. - Verwenden Sie für Clients und asynchrone Anmeldeinformationen stets Kontextmanager. Umschließen Sie jeden Client
mit `TableClient(...) as client:(sync)` oder`TableClient(...) as client:(async)`. Verwenden Sie für asynchrone„DefaultAzureCredential“aus„azure.identity.aio“ebenfalls„async“ mit „credential:“, damit Tokens und Transportdaten bereinigt werden. - Verwende
„DefaultAzureCredential“für eine portierbare Authentifizierung zwischen lokaler Entwicklung und Azure (vermeide nach Möglichkeit Verbindungszeichenfolgen und API-Schlüssel). - Entwerfen Sie Partitionsschlüssel für Abfragemuster und eine gleichmäßige Verteilung
- Führen Sie Abfragen nach Möglichkeitinnerhalb von Partitionen durch (partitionsübergreifende Abfragen sind ressourcenintensiv)
- Verwenden Sie Batch-Operationen für mehrere Entitäten in derselben Partition
- Verwenden Sie
„upsert_entity“für idempotente Schreibvorgänge - Verwenden Sie parametrisierte Abfragen, um Injektionen zu verhindern
- Halten Sie Entitäten klein – maximal 1 MB pro Entität
- Verwende einen asynchronen Client für Szenarien mit hohem Durchsatz
---
name: azure-data-tables-py
description: Provides code samples and best practices for using the Azure Tables SDK for Python to perform NoSQL key-value storage, entity CRUD, batch operations, and queries against Azure Storage Tables or Cosmos DB Table API.
license: MIT
---
# Azure Tables SDK for Python
NoSQL key-value store for structured data (Azure Storage Tables or Cosmos DB Table API).
## Installation
```bash
pip install azure-data-tables azure-identity
```
## Environment Variables
```bash
# Azure Storage Tables
AZURE_STORAGE_ACCOUNT_URL=https://<account>.table.core.windows.net # Required for Azure Storage Tables
# Cosmos DB Table API
COSMOS_TABLE_ENDPOINT=https://<account>.table.cosmos.azure.com # Required for Cosmos DB Table API
AZURE_TOKEN_CREDENTIALS=prod # Required only if DefaultAzureCredential is used in production
```
## Authentication & Lifecycle
> **🔑 Two rules apply to every code sample below:**
>
> 1. **Prefer `DefaultAzureCredential`.** It works locally (Azure CLI / VS Code / Developer CLI) and in Azure (managed identity, workload identity) with no code change. Avoid connection strings, account/API keys — they bypass Entra audit and rotation.
> - Local dev: `DefaultAzureCredential` works as-is.
> - Production: set `AZURE_TOKEN_CREDENTIALS=prod` (or `AZURE_TOKEN_CREDENTIALS=<specific_credential>`) to constrain the credential chain to production-safe credentials.
> 2. **Wrap every client in a context manager** so HTTP transports, sockets, and token caches are released deterministically:
> - Sync: `with <Client>(...) as client:`
> - Async: `async with <Client>(...) as client:` **and** `async with DefaultAzureCredential() as credential:` (from `azure.identity.aio`)
>
> Snippets may abbreviate this setup, but production code should always follow both rules.
```python
import os
from azure.identity import DefaultAzureCredential, ManagedIdentityCredential
from azure.data.tables import TableServiceClient, TableClient
# Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential>
credential = DefaultAzureCredential(require_envvar=True)
# Or use a specific credential directly in production:
# See https://learn.microsoft.com/python/api/overview/azure/identity-readme?view=azure-python#credential-classes
# credential = ManagedIdentityCredential()
endpoint = "https://<account>.table.core.windows.net"
# Service client (manage tables)
with TableServiceClient(endpoint=endpoint, credential=credential) as service_client:
# Use service_client here (see following sections for operations)
...
# Table client (work with entities)
with TableClient(endpoint=endpoint, table_name="mytable", credential=credential) as table_client:
# Use table_client here (see following sections for operations)
...
```
## Client Types
| Client | Purpose |
|--------|---------|
| `TableServiceClient` | Create/delete tables, list tables |
| `TableClient` | Entity CRUD, queries |
## Table Operations
```python
# Create table
service_client.create_table("mytable")
# Create if not exists
service_client.create_table_if_not_exists("mytable")
# Delete table
service_client.delete_table("mytable")
# List tables
for table in service_client.list_tables():
print(table.name)
# Get table client
table_client = service_client.get_table_client("mytable")
```
## Entity Operations
**Important**: Every entity requires `PartitionKey` and `RowKey` (together form unique ID).
### Create Entity
```python
entity = {
"PartitionKey": "sales",
"RowKey": "order-001",
"product": "Widget",
"quantity": 5,
"price": 9.99,
"shipped": False
}
# Create (fails if exists)
table_client.create_entity(entity=entity)
# Upsert (create or replace)
table_client.upsert_entity(entity=entity)
```
### Get Entity
```python
# Get by key (fastest)
entity = table_client.get_entity(
partition_key="sales",
row_key="order-001"
)
print(f"Product: {entity['product']}")
```
### Update Entity
```python
# Replace entire entity
entity["quantity"] = 10
table_client.update_entity(entity=entity, mode="replace")
# Merge (update specific fields only)
update = {
"PartitionKey": "sales",
"RowKey": "order-001",
"shipped": True
}
table_client.update_entity(entity=update, mode="merge")
```
### Delete Entity
```python
table_client.delete_entity(
partition_key="sales",
row_key="order-001"
)
```
## Query Entities
### Query Within Partition
```python
# Query by partition (efficient)
entities = table_client.query_entities(
query_filter="PartitionKey eq 'sales'"
)
for entity in entities:
print(entity)
```
### Query with Filters
```python
# Filter by properties
entities = table_client.query_entities(
query_filter="PartitionKey eq 'sales' and quantity gt 3"
)
# With parameters (safer)
entities = table_client.query_entities(
query_filter="PartitionKey eq @pk and price lt @max_price",
parameters={"pk": "sales", "max_price": 50.0}
)
```
### Select Specific Properties
```python
entities = table_client.query_entities(
query_filter="PartitionKey eq 'sales'",
select=["RowKey", "product", "price"]
)
```
### List All Entities
```python
# List all (cross-partition - use sparingly)
for entity in table_client.list_entities():
print(entity)
```
## Batch Operations
```python
from azure.data.tables import TableTransactionError
# Batch operations (same partition only!)
operations = [
("create", {"PartitionKey": "batch", "RowKey": "1", "data": "first"}),
("create", {"PartitionKey": "batch", "RowKey": "2", "data": "second"}),
("upsert", {"PartitionKey": "batch", "RowKey": "3", "data": "third"}),
]
try:
table_client.submit_transaction(operations)
except TableTransactionError as e:
print(f"Transaction failed: {e}")
```
## Async Client
```python
from azure.data.tables.aio import TableServiceClient, TableClient
from azure.identity.aio import DefaultAzureCredential
async def table_operations():
async with DefaultAzureCredential() as credential:
async with TableClient(
endpoint="https://<account>.table.core.windows.net",
table_name="mytable",
credential=credential
) as client:
# Create
await client.create_entity(entity={
"PartitionKey": "async",
"RowKey": "1",
"data": "test"
})
# Query
async for entity in client.query_entities("PartitionKey eq 'async'"):
print(entity)
import asyncio
asyncio.run(table_operations())
```
## Data Types
| Python Type | Table Storage Type |
|-------------|-------------------|
| `str` | String |
| `int` | Int64 |
| `float` | Double |
| `bool` | Boolean |
| `datetime` | DateTime |
| `bytes` | Binary |
| `UUID` | Guid |
## Best Practices
1. **Pick sync OR async and stay consistent.** Do not mix `azure.data.tables` sync clients with `azure.data.tables.aio` async clients in the same call path. Choose one mode per module.
2. **Always use context managers for clients and async credentials.** Wrap every client in `with TableClient(...) as client:` (sync) or `async with TableClient(...) as client:` (async). For async `DefaultAzureCredential` from `azure.identity.aio`, also use `async with credential:` so tokens and transports are cleaned up.
3. **Use `DefaultAzureCredential`** for portable auth across local dev and Azure (avoid connection strings / API keys when possible).
4. **Design partition keys** for query patterns and even distribution
5. **Query within partitions** whenever possible (cross-partition is expensive)
6. **Use batch operations** for multiple entities in same partition
7. **Use `upsert_entity`** for idempotent writes
8. **Use parameterized queries** to prevent injection
9. **Keep entities small** — max 1MB per entity
10. **Use async client** for high-throughput scenarios
Alle Dateien
0 Dateienazure-data-tables-py installieren
Laden Sie die Skill-Dateien herunter und entpacken Sie sie in Ihr Verzeichnis „.claude/skills/“.
ZIP herunterladenKlonen Sie das Repository und kopieren Sie die Skill-Dateien in Ihr Projekt.
git clone https://github.com/microsoft/skills/tree/main/.github/plugins/azure-sdk-python/skills/azure-data-tables-py # Copy SKILL.md to your .claude/skills/ directory
Kopieren





Heim
