Gestire le proprietà e i metadati dei BLOB con Python
Oltre ai dati che contengono, i 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 usando la libreria client Archiviazione di Azure per Python.
Per informazioni sulla gestione di proprietà e metadati tramite API asincrone, vedere Impostare i metadati blob in modo asincrono.
Prerequisiti
- Questo articolo presuppone che sia già stato configurato un progetto per lavorare 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
import
istruzioni 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 necessarie per lavorare con le proprietà o i metadati del BLOB. Per altre informazioni, vedere le linee guida per l'autorizzazione per le operazioni API REST seguenti:
Informazioni su proprietà e metadati
Proprietà di sistema: le proprietà di sistema esistono in ogni risorsa di archiviazione BLOB. Alcune di esse possono essere lette o impostate, mentre altre sono di sola lettura. Anche se in modo non esplicito, 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.
Nota
I tag di indice BLOB offrono anche la possibilità di archiviare attributi chiave/valore arbitrari definiti dall'utente insieme a una risorsa di archiviazione BLOB di Azure. Analogamente ai metadati, solo i tag di indice BLOB vengono indicizzati automaticamente e resi ricercabili dal servizio BLOB nativo. I metadati non possono essere indicizzati e sottoposti a query a meno che non si usi un servizio separato, ad esempio Ricerca di Azure.
Per altre informazioni su questa funzionalità, vedere Gestire e trovare dati nell'archivio BLOB di Azure con indice BLOB (anteprima).
Impostare e recuperare le proprietà
Per impostare le proprietà in un BLOB, usare il metodo seguente:
Tutte le proprietà non impostate in modo esplicito vengono cancellate. Per mantenere le proprietà esistenti, è prima possibile recuperare le proprietà del BLOB, quindi usarle per popolare le intestazioni che non vengono aggiornate.
Nell'esempio di codice seguente vengono impostate le content_type
proprietà di sistema e content_language
in un BLOB, mantenendo al tempo stesso le proprietà esistenti:
def set_properties(self, blob_service_client: BlobServiceClient, container_name):
blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")
# Get the existing blob properties
properties = blob_client.get_blob_properties()
# Set the content_type and content_language headers, and populate the remaining headers from the existing properties
blob_headers = ContentSettings(content_type="text/plain",
content_encoding=properties.content_settings.content_encoding,
content_language="en-US",
content_disposition=properties.content_settings.content_disposition,
cache_control=properties.content_settings.cache_control,
content_md5=properties.content_settings.content_md5)
blob_client.set_http_headers(blob_headers)
Per recuperare le proprietà in un BLOB, usare il metodo seguente:
L'esempio di codice seguente ottiene le proprietà di sistema di un BLOB e visualizza alcuni dei valori:
def get_properties(self, blob_service_client: BlobServiceClient, container_name):
blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")
properties = blob_client.get_blob_properties()
print(f"Blob type: {properties.blob_type}")
print(f"Blob size: {properties.size}")
print(f"Content type: {properties.content_settings.content_type}")
print(f"Content language: {properties.content_settings.content_language}")
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, inviare un dizionario contenente coppie nome-valore usando il metodo seguente:
L'esempio di codice seguente imposta i metadati in un BLOB:
def set_metadata(self, blob_service_client: BlobServiceClient, container_name):
blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")
# Retrieve existing metadata, if desired
blob_metadata = blob_client.get_blob_properties().metadata
more_blob_metadata = {'docType': 'text', 'docCategory': 'reference'}
blob_metadata.update(more_blob_metadata)
# Set metadata on the blob
blob_client.set_blob_metadata(metadata=blob_metadata)
Per recuperare i metadati, chiamare il metodo get_blob_properties nel BLOB per popolare la raccolta di metadati, quindi leggere i valori, come illustrato nell'esempio seguente. Il get_blob_properties
metodo recupera le proprietà e i metadati del BLOB chiamando sia l'operazione Get Blob Properties che l'operazione Get Blob Metadata .
L'esempio di codice seguente legge i metadati in un BLOB e stampa ogni coppia chiave/valore:
def get_metadata(self, blob_service_client: BlobServiceClient, container_name):
blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")
# Retrieve existing metadata, if desired
blob_metadata = blob_client.get_blob_properties().metadata
for k, v in blob_metadata.items():
print(k, v)
Impostare i metadati blob in modo asincrono
La libreria client Archiviazione BLOB di Azure per Python supporta la gestione asincrona delle proprietà e dei metadati dei BLOB. Per altre informazioni sui requisiti di configurazione del progetto, consultare Programmazione asincrona.
Seguire questa procedura per impostare i metadati BLOB 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 il codice per eseguire il programma utilizzando
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 lamain()
coroutine crea prima di tutto il primo livelloBlobServiceClient
usandoasync with
, quindi chiama il metodo che imposta i metadati del BLOB. Si noti che soltanto il client di primo livello deve utilizzareasync with
, poiché gli altri client da esso creati condividono lo stesso pool di connessioni.async def main(): sample = BlobSamples() # 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 BLOB. 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_blob_properties
eset_blob_metadata
.async def set_metadata(self, blob_service_client: BlobServiceClient, container_name): blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt") # Retrieve existing metadata, if desired properties = await blob_client.get_blob_properties() blob_metadata = properties.metadata more_blob_metadata = {'docType': 'text', 'docCategory': 'reference'} blob_metadata.update(more_blob_metadata) # Set metadata on the blob await blob_client.set_blob_metadata(metadata=blob_metadata)
Con questa configurazione di base, è possibile implementare altri esempi in questo articolo come coroutine usando la sintassi async/await.
Risorse
Per altre informazioni su come gestire le proprietà di sistema e i metadati definiti dall'utente usando la libreria client Archiviazione BLOB di Azure per Python, vedere le risorse seguenti.
Operazioni dell'API REST
Azure SDK per Python contiene librerie basate su API REST di Azure che consentono di interagire con le operazioni API REST tramite paradigmi Python noti. I metodi della libreria client per la gestione delle proprietà di sistema e dei metadati definiti dall'utente usano le operazioni API REST seguenti:
- Impostare le proprietà del BLOB (API REST)
- Ottenere le proprietà del BLOB (API REST)
- Impostare i metadati blob (API REST)
- Ottenere metadati BLOB (API REST)
Esempi di codice
Risorse per la libreria client
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per