Dela via


Hantera blobegenskaper och metadata med Python

Förutom de data som de innehåller stöder blobar systemegenskaper och användardefinierade metadata. Den här artikeln visar hur du hanterar systemegenskaper och användardefinierade metadata med hjälp av Azure Storage-klientbiblioteket för Python.

Mer information om hur du hanterar egenskaper och metadata med asynkrona API:er finns i Ange blobmetadata asynkront.

Förutsättningar

  • Den här artikeln förutsätter att du redan har ett projekt konfigurerat för att fungera med Azure Blob Storage-klientbiblioteket för Python. Mer information om hur du konfigurerar projektet, inklusive paketinstallation, tillägg import av instruktioner och skapande av ett auktoriserat klientobjekt finns i Komma igång med Azure Blob Storage och Python.
  • Auktoriseringsmekanismen måste ha behörighet att arbeta med blobegenskaper eller metadata. Mer information finns i auktoriseringsvägledningen för följande REST API-åtgärder:

Om egenskaper och metadata

  • Systemegenskaper: Systemegenskaper finns på varje Blob Storage-resurs. Vissa av dem kan läsas eller ställas in, medan andra är skrivskyddade. Under täcket motsvarar vissa systemegenskaper vissa standard-HTTP-huvuden. Azure Storage-klientbiblioteket för Python underhåller dessa egenskaper åt dig.

  • Användardefinierade metadata: Användardefinierade metadata består av ett eller flera namn/värde-par som du anger för en Blob Storage-resurs. Du kan använda metadata för att lagra ytterligare värden med resursen. Metadatavärden är endast för dina egna syften och påverkar inte hur resursen beter sig.

    Metadatanamn/värdepar är giltiga HTTP-huvuden och bör följa alla begränsningar som styr HTTP-huvuden. Mer information om namngivningskrav för metadata finns i Metadatanamn.

Kommentar

Blobindextaggar ger också möjlighet att lagra godtyckliga användardefinierade nyckel-/värdeattribut tillsammans med en Azure Blob Storage-resurs. Även om det liknar metadata indexeras endast blobindextaggar automatiskt och görs sökbara av den interna blobtjänsten. Metadata kan inte indexeras och frågas om du inte använder en separat tjänst, till exempel Azure Search.

Mer information om den här funktionen finns i Hantera och hitta data på Azure Blob Storage med blobindex (förhandsversion).

Ange och hämta egenskaper

Om du vill ange egenskaper för en blob använder du följande metod:

Alla egenskaper som inte uttryckligen anges rensas. Om du vill bevara befintliga egenskaper kan du först hämta blobegenskaperna och sedan använda dem för att fylla i rubrikerna som inte uppdateras.

I följande kodexempel anges systemegenskaperna content_type och content_language på en blob, samtidigt som befintliga egenskaper bevaras:

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)

Om du vill hämta egenskaper på en blob använder du följande metod:

I följande kodexempel hämtas en blobs systemegenskaper och några av värdena visas:

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}")

Ange och hämta metadata

Du kan ange metadata som ett eller flera namn/värde-par på en blob- eller containerresurs. Om du vill ange metadata skickar du en ordlista som innehåller namn/värde-par med hjälp av följande metod:

I följande kodexempel anges metadata på en 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)

Om du vill hämta metadata anropar du metoden get_blob_properties i bloben för att fylla i metadatasamlingen och läser sedan värdena, som du ser i exemplet nedan. Metoden get_blob_properties hämtar blobegenskaper och metadata genom att anropa både åtgärden Hämta blobegenskaper och åtgärden Hämta blobmetadata .

I följande kodexempel läss metadata på en blob och varje nyckel/värde-par skrivs ut:

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)

Ange blobmetadata asynkront

Azure Blob Storage-klientbiblioteket för Python har stöd för att hantera blobegenskaper och metadata asynkront. Mer information om krav för projektkonfiguration finns i Asynkron programmering.

Följ dessa steg för att ange blobmetadata med asynkrona API:er:

  1. Lägg till följande importinstruktioner:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient
    
  2. Lägg till kod för att köra programmet med .asyncio.run Den här funktionen kör den skickade coroutinen main() i vårt exempel och hanterar händelseloopen asyncio . Coroutines deklareras med syntaxen async/await. I det här exemplet main() skapar coroutinen först den översta nivån BlobServiceClient med och async withanropar sedan metoden som anger blobmetadata. Observera att endast klienten på den översta nivån behöver använda async with, eftersom andra klienter som skapats från den delar samma anslutningspool.

    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())
    
  3. Lägg till kod för att ange blobmetadata. Koden är samma som det synkrona exemplet, förutom att metoden deklareras med nyckelordet async och nyckelordet await används när du anropar get_blob_properties metoderna och set_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)
    

Med den här grundläggande konfigurationen på plats kan du implementera andra exempel i den här artikeln som coroutines med hjälp av async/await-syntax.

Resurser

Mer information om hur du hanterar systemegenskaper och användardefinierade metadata med hjälp av Azure Blob Storage-klientbiblioteket för Python finns i följande resurser.

REST API-åtgärder

Azure SDK för Python innehåller bibliotek som bygger på Azure REST API så att du kan interagera med REST API-åtgärder via välbekanta Python-paradigm. Klientbiblioteksmetoderna för att hantera systemegenskaper och användardefinierade metadata använder följande REST API-åtgärder:

Kodexempel

Klientbiblioteksresurser