Gestire le proprietà e i metadati dei contenitori con Python
Oltre ai dati che contengono, i contenitori BLOB supportano le proprietà di sistema e i metadati definiti dall'utente. Questo articolo illustra come gestire le proprietà di sistema e i metadati definiti dall'utente con la libreria client di Archiviazione di Azure per Python.
Per informazioni sulla gestione di proprietà e metadati tramite API asincrone, vedere Impostare i metadati del contenitore in modo asincrono.
Prerequisiti
- Questo articolo presuppone che sia già stato configurato un progetto per l'uso con la libreria client di Archiviazione BLOB di Azure per Python. Per informazioni sulla configurazione del progetto, tra cui l'installazione del pacchetto, l'aggiunta di istruzioni
import
e la creazione di un oggetto client autorizzato, vedere Introduzione ad Archiviazione BLOB di Azure e Python. - Il meccanismo di autorizzazione deve disporre delle autorizzazioni per utilizzare proprietà o metadati dei contenitori. Per altre informazioni, vedere le linee guida per l'autorizzazione per le operazioni API REST seguenti:
Informazioni su proprietà e metadati
Proprietà di sistema: proprietà di sistema su ogni risorsa di archiviazione BLOB. Alcune di esse possono essere lette o impostate, mentre altre sono di sola lettura. Dietro le quinte, alcune proprietà di sistema corrispondono a specifiche intestazioni HTTP standard. La libreria client di Archiviazione di Azure per Python gestisce automaticamente queste proprietà.
Metadati definiti dall'utente: i metadati definiti dall'utente sono costituiti da una o più coppie nome-valore specificate per una risorsa di archiviazione BLOB. È possibile usare i metadati per archiviare valori aggiuntivi con la risorsa. I valori di metadati sono solo per le proprie esigenze e non influiscono sul comportamento della risorsa.
Le coppie nome/valore di metadati sono intestazioni HTTP valide e devono essere conformi alle restrizioni imposte sulle intestazioni HTTP. Per altre informazioni sui requisiti di denominazione dei metadati, vedere Nomi dei metadati.
Recuperare le proprietà del contenitore
Per recuperare le proprietà del contenitore, usare il metodo seguente:
L'esempio di codice seguente recupera le proprietà di sistema di un contenitore e scrive i valori delle proprietà in una finestra della console:
def get_properties(self, blob_service_client: BlobServiceClient, container_name):
container_client = blob_service_client.get_container_client(container=container_name)
properties = container_client.get_container_properties()
print(f"Public access type: {properties.public_access}")
print(f"Lease status: {properties.lease.status}")
print(f"Lease state: {properties.lease.state}")
print(f"Has immutability policy: {properties.has_immutability_policy}")
Impostare e recuperare i metadati
È possibile specificare i metadati come uno o più coppie nome-valore in una risorsa BLOB o contenitore. Per impostare i metadati, usare il metodo seguente:
L'impostazione dei metadati del contenitore sovrascrive tutti i metadati esistenti associati al contenitore. Non è possibile modificare una sola coppia nome-valore.
Il seguente codice di esempio imposta i metadati in un contenitore:
def set_metadata(self, blob_service_client: BlobServiceClient, container_name):
container_client = blob_service_client.get_container_client(container=container_name)
# Retrieve existing metadata, if desired
metadata = container_client.get_container_properties().metadata
more_metadata = {'docType': 'text', 'docCategory': 'reference'}
metadata.update(more_metadata)
# Set metadata on the container
container_client.set_container_metadata(metadata=metadata)
Per recuperare i metadati, chiamare il metodo seguente:
L'esempio seguente legge i valori dei metadati:
def get_metadata(self, blob_service_client: BlobServiceClient, container_name):
container_client = blob_service_client.get_container_client(container=container_name)
# Retrieve existing metadata, if desired
metadata = container_client.get_container_properties().metadata
for k, v in metadata.items():
print(k, v)
Impostare i metadati del contenitore in modo asincrono
La libreria client di Archiviazione BLOB di Azure per Python supporta la gestione asincrona delle proprietà e dei metadati dei contenitori. Per altre informazioni sui requisiti di configurazione del progetto, vedere Programmazione asincrona.
Seguire questa procedura per impostare i metadati del contenitore usando le API asincrone:
Aggiungere le seguenti istruzioni Import:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient
Aggiungere codice per eseguire il programma usando
asyncio.run
. Questa funzione esegue la coroutine passata,main()
nell'esempio e gestisce il ciclo di eventiasyncio
. Le coroutine vengono dichiarate con la sintassi async/await. In questo esempio, la coroutinemain()
crea prima di tutto ilBlobServiceClient
di primo livello usandoasync with
, quindi chiama il metodo che imposta i metadati del contenitore. Si noti che solo il client di primo livello deve usareasync with
, poiché gli altri client creati da esso condividono lo stesso pool di connessioni.async def main(): sample = ContainerSamples() # TODO: Replace <storage-account-name> with your actual storage account name account_url = "https://<storage-account-name>.blob.core.windows.net" credential = DefaultAzureCredential() async with BlobServiceClient(account_url, credential=credential) as blob_service_client: await sample.set_metadata(blob_service_client, "sample-container") if __name__ == '__main__': asyncio.run(main())
Aggiungere il codice per impostare i metadati del contenitore. Il codice è uguale all'esempio sincrono, ad eccezione del fatto che il metodo viene dichiarato con la parola chiave
async
e la parola chiaveawait
viene usata quando si chiamano i metodiget_container_properties
eset_container_metadata
.async def set_metadata(self, blob_service_client: BlobServiceClient, container_name): container_client = blob_service_client.get_container_client(container=container_name) # Retrieve existing metadata, if desired metadata = (await container_client.get_container_properties()).metadata more_metadata = {'docType': 'text', 'docCategory': 'reference'} metadata.update(more_metadata) # Set metadata on the container await container_client.set_container_metadata(metadata=metadata)
Con questa configurazione di base, è possibile implementare altri esempi in questo articolo come coroutine usando la sintassi async/await.
Risorse
Per altre informazioni sull'impostazione e il recupero di proprietà e metadati del contenitore tramite la libreria client di Archiviazione BLOB di Azure per Python, vedere le risorse seguenti.
Operazioni dell'API REST
Azure SDK per Python contiene librerie basate sull'API REST di Azure, che consentono di interagire con le operazioni dell'API REST tramite paradigmi Python noti. I metodi della libreria client per l'impostazione e il recupero di proprietà e metadati usano le operazioni API REST seguenti:
- Get Container Properties (API REST)
- Set Container Metadata (API REST)
- Get Container Metadata (API REST)
Il metodo get_container_properties
recupera le proprietà e i metadati del contenitore chiamando sia l'operazione Get Container Properties che l'operazione Get Container Metadata.