|
Add this skill
npx mdskills install sickn33/azure-storage-blob-pyComprehensive SDK reference with client hierarchy, examples, and performance tuning guidance
1---2name: azure-storage-blob-py3description: |4 Azure Blob Storage SDK for Python. Use for uploading, downloading, listing blobs, managing containers, and blob lifecycle.5 Triggers: "blob storage", "BlobServiceClient", "ContainerClient", "BlobClient", "upload blob", "download blob".6package: azure-storage-blob7---89# Azure Blob Storage SDK for Python1011Client library for Azure Blob Storage — object storage for unstructured data.1213## Installation1415```bash16pip install azure-storage-blob azure-identity17```1819## Environment Variables2021```bash22AZURE_STORAGE_ACCOUNT_NAME=<your-storage-account>23# Or use full URL24AZURE_STORAGE_ACCOUNT_URL=https://<account>.blob.core.windows.net25```2627## Authentication2829```python30from azure.identity import DefaultAzureCredential31from azure.storage.blob import BlobServiceClient3233credential = DefaultAzureCredential()34account_url = "https://<account>.blob.core.windows.net"3536blob_service_client = BlobServiceClient(account_url, credential=credential)37```3839## Client Hierarchy4041| Client | Purpose | Get From |42|--------|---------|----------|43| `BlobServiceClient` | Account-level operations | Direct instantiation |44| `ContainerClient` | Container operations | `blob_service_client.get_container_client()` |45| `BlobClient` | Single blob operations | `container_client.get_blob_client()` |4647## Core Workflow4849### Create Container5051```python52container_client = blob_service_client.get_container_client("mycontainer")53container_client.create_container()54```5556### Upload Blob5758```python59# From file path60blob_client = blob_service_client.get_blob_client(61 container="mycontainer",62 blob="sample.txt"63)6465with open("./local-file.txt", "rb") as data:66 blob_client.upload_blob(data, overwrite=True)6768# From bytes/string69blob_client.upload_blob(b"Hello, World!", overwrite=True)7071# From stream72import io73stream = io.BytesIO(b"Stream content")74blob_client.upload_blob(stream, overwrite=True)75```7677### Download Blob7879```python80blob_client = blob_service_client.get_blob_client(81 container="mycontainer",82 blob="sample.txt"83)8485# To file86with open("./downloaded.txt", "wb") as file:87 download_stream = blob_client.download_blob()88 file.write(download_stream.readall())8990# To memory91download_stream = blob_client.download_blob()92content = download_stream.readall() # bytes9394# Read into existing buffer95stream = io.BytesIO()96num_bytes = blob_client.download_blob().readinto(stream)97```9899### List Blobs100101```python102container_client = blob_service_client.get_container_client("mycontainer")103104# List all blobs105for blob in container_client.list_blobs():106 print(f"{blob.name} - {blob.size} bytes")107108# List with prefix (folder-like)109for blob in container_client.list_blobs(name_starts_with="logs/"):110 print(blob.name)111112# Walk blob hierarchy (virtual directories)113for item in container_client.walk_blobs(delimiter="/"):114 if item.get("prefix"):115 print(f"Directory: {item['prefix']}")116 else:117 print(f"Blob: {item.name}")118```119120### Delete Blob121122```python123blob_client.delete_blob()124125# Delete with snapshots126blob_client.delete_blob(delete_snapshots="include")127```128129## Performance Tuning130131```python132# Configure chunk sizes for large uploads/downloads133blob_client = BlobClient(134 account_url=account_url,135 container_name="mycontainer",136 blob_name="large-file.zip",137 credential=credential,138 max_block_size=4 * 1024 * 1024, # 4 MiB blocks139 max_single_put_size=64 * 1024 * 1024 # 64 MiB single upload limit140)141142# Parallel upload143blob_client.upload_blob(data, max_concurrency=4)144145# Parallel download146download_stream = blob_client.download_blob(max_concurrency=4)147```148149## SAS Tokens150151```python152from datetime import datetime, timedelta, timezone153from azure.storage.blob import generate_blob_sas, BlobSasPermissions154155sas_token = generate_blob_sas(156 account_name="<account>",157 container_name="mycontainer",158 blob_name="sample.txt",159 account_key="<account-key>", # Or use user delegation key160 permission=BlobSasPermissions(read=True),161 expiry=datetime.now(timezone.utc) + timedelta(hours=1)162)163164# Use SAS token165blob_url = f"https://<account>.blob.core.windows.net/mycontainer/sample.txt?{sas_token}"166```167168## Blob Properties and Metadata169170```python171# Get properties172properties = blob_client.get_blob_properties()173print(f"Size: {properties.size}")174print(f"Content-Type: {properties.content_settings.content_type}")175print(f"Last modified: {properties.last_modified}")176177# Set metadata178blob_client.set_blob_metadata(metadata={"category": "logs", "year": "2024"})179180# Set content type181from azure.storage.blob import ContentSettings182blob_client.set_http_headers(183 content_settings=ContentSettings(content_type="application/json")184)185```186187## Async Client188189```python190from azure.identity.aio import DefaultAzureCredential191from azure.storage.blob.aio import BlobServiceClient192193async def upload_async():194 credential = DefaultAzureCredential()195196 async with BlobServiceClient(account_url, credential=credential) as client:197 blob_client = client.get_blob_client("mycontainer", "sample.txt")198199 with open("./file.txt", "rb") as data:200 await blob_client.upload_blob(data, overwrite=True)201202# Download async203async def download_async():204 async with BlobServiceClient(account_url, credential=credential) as client:205 blob_client = client.get_blob_client("mycontainer", "sample.txt")206207 stream = await blob_client.download_blob()208 data = await stream.readall()209```210211## Best Practices2122131. **Use DefaultAzureCredential** instead of connection strings2142. **Use context managers** for async clients2153. **Set `overwrite=True`** explicitly when re-uploading2164. **Use `max_concurrency`** for large file transfers2175. **Prefer `readinto()`** over `readall()` for memory efficiency2186. **Use `walk_blobs()`** for hierarchical listing2197. **Set appropriate content types** for web-served blobs220
Full transparency — inspect the skill content before installing.