Condividi tramite


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

Configurazione dell'ambiente

Se non si dispone di un progetto esistente, questa sezione illustra come configurare un progetto per l’uso con la libreria client di Archiviazione BLOB di Azure per Python. Per altre informazioni, vedere Introduzione ad Archiviazione BLOB di Azure e Python.

Per usare gli esempi di codice in questo articolo, seguire questa procedura per configurare il progetto.

Installare i pacchetti

Installare i pacchetti seguenti tramite pip install:

pip install azure-storage-blob azure-identity

Aggiungere le istruzioni di importazione

Aggiungere le istruzioni import seguenti:

from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient

Autorizzazione

Il meccanismo di autorizzazione deve disporre delle autorizzazioni necessarie per utilizzare proprietà o metadati dei contenitori. Per l'autorizzazione con Microsoft Entra ID (scelta consigliata), è necessario disporre del ruolo predefinito di Controllo degli accessi in base al ruolo di Azure Lettore dei dati del BLOB di archiviazione o ruolo superiore per le operazioni get, e del ruolo Collaboratore ai dati del BLOB di archiviazione o ruolo superiore per le operazioni set. Per altre informazioni, vedere le indicazioni sulle autorizzazioni per Get Container Properties (API REST), Set Container Metadata (API REST) o Get Container Metadata (API REST).

Creare un oggetto client

Per connettere un'app ad Archiviazione BLOB, creare un'istanza di BlobServiceClient. Nell'esempio seguente viene illustrato come creare un oggetto client usando DefaultAzureCredential per l'autorizzazione:

# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
credential = DefaultAzureCredential()

# Create the BlobServiceClient object
blob_service_client = BlobServiceClient(account_url, credential=credential)

È anche possibile creare oggetti client per contenitori o BLOB specifici, direttamente o dall'oggetto BlobServiceClient. Per altre informazioni sulla creazione e la gestione di oggetti client, vedere Creare e gestire oggetti client che interagiscono con le risorse dati.

Informazioni su proprietà e metadati

  • Proprietà di sistema: le proprietà di sistema esistono 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 ulteriori informazioni sui requisiti di denominazione dei metadati, consultare 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.

L'esempio di codice seguente 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:

  1. Aggiungere le seguenti istruzioni Import:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient
    
  2. Aggiungere il codice per eseguire il programma utilizzando asyncio.run. Questa funzione esegue la coroutine passata, main() nell'esempio, e gestisce il ciclo di eventi asyncio. Le coroutine vengono dichiarate con la sintassi async/await. In questo esempio, la coroutine main() crea prima di tutto il BlobServiceClient di primo livello usando async with, quindi chiama il metodo che imposta i metadati del contenitore. Si noti che solo il client di primo livello deve usare async 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())
    
  3. 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 chiave await viene usata quando si chiamano i metodi get_container_properties e set_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.

Esempi di codice

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:

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.

Risorse della libreria client

  • Questo articolo fa parte della Guida per sviluppatori di Archiviazione BLOB per Python. Per altre informazioni, vedere l’elenco completo degli articoli della Guida per sviluppatori in Creare la propria app Python.