Delen via


Blob-eigenschappen en -metagegevens beheren met Python

Naast de gegevens die ze bevatten, ondersteunen blobs systeemeigenschappen en door de gebruiker gedefinieerde metagegevens. In dit artikel wordt beschreven hoe u systeemeigenschappen en door de gebruiker gedefinieerde metagegevens beheert met behulp van de Azure Storage-clientbibliotheek voor Python.

Zie Blob-metagegevens asynchroon instellen voor meer informatie over het beheren van eigenschappen en metagegevens met behulp van asynchrone API's.

Vereisten

Uw omgeving instellen

Als u geen bestaand project hebt, ziet u in deze sectie hoe u een project instelt voor gebruik met de Azure Blob Storage-clientbibliotheek voor Python. Zie Aan de slag met Azure Blob Storage en Python voor meer informatie.

Als u wilt werken met de codevoorbeelden in dit artikel, volgt u deze stappen om uw project in te stellen.

Pakketten installeren

Installeer de volgende pakketten met behulp van pip install:

pip install azure-storage-blob azure-identity

Importinstructies toevoegen

Voeg de volgende import instructies toe:

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

Autorisatie

Het autorisatiemechanisme moet over de benodigde machtigingen beschikken om te kunnen werken met containereigenschappen of metagegevens. Voor autorisatie met Microsoft Entra-id (aanbevolen), hebt u ingebouwde Azure RBAC-rol Storage Blob-gegevenslezer of hoger nodig voor de get-bewerkingen, en Voor de inzender voor opslagblobgegevens of hoger voor de setbewerkingen. Zie de autorisatierichtlijnen voor Het instellen van blobeigenschappen (REST API) en het ophalen van blobeigenschappen (REST API) en het instellen van blobmetagegevens (REST API) of het ophalen van blobmetagegevens (REST API) voor meer informatie.

Een clientobject maken

Als u een app wilt verbinden met Blob Storage, maakt u een exemplaar van BlobServiceClient. In het volgende voorbeeld ziet u hoe u een clientobject maakt met behulp van DefaultAzureCredential autorisatie:

# 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)

U kunt ook clientobjecten maken voor specifieke containers of blobs, rechtstreeks of vanuit het BlobServiceClient object. Zie Clientobjecten maken en beheren die interactie hebben met gegevensbronnen voor meer informatie over het maken en beheren van clientobjecten.

Over eigenschappen en metagegevens

  • Systeemeigenschappen: Systeemeigenschappen bestaan op elke Blob Storage-resource. Sommige kunnen worden gelezen of ingesteld, terwijl andere alleen-lezen zijn. Onder de covers komen sommige systeemeigenschappen overeen met bepaalde standaard HTTP-headers. De Azure Storage-clientbibliotheek voor Python onderhoudt deze eigenschappen voor u.

  • Door de gebruiker gedefinieerde metagegevens: door de gebruiker gedefinieerde metagegevens bestaan uit een of meer naam-waardeparen die u opgeeft voor een Blob Storage-resource. U kunt metagegevens gebruiken om extra waarden op te slaan met de resource. Metagegevenswaarden zijn alleen bedoeld voor uw eigen doeleinden en hebben geen invloed op het gedrag van de resource.

    Naam/waardeparen van metagegevens zijn geldige HTTP-headers en moeten voldoen aan alle beperkingen voor HTTP-headers. Zie Namen van metagegevens voor meer informatie over naamgevingsvereisten voor metagegevens.

Notitie

Blob-indextags bieden ook de mogelijkheid om willekeurige door de gebruiker gedefinieerde sleutel-/waardekenmerken op te slaan naast een Azure Blob Storage-resource. Hoewel dit vergelijkbaar is met metagegevens, worden alleen blob-indextags automatisch geïndexeerd en doorzoekbaar gemaakt door de systeemeigen blobservice. Metagegevens kunnen niet worden geïndexeerd en opgevraagd, tenzij u een afzonderlijke service zoals Azure Search gebruikt.

Zie Gegevens in Azure Blob Storage beheren en zoeken met blobindex (preview) voor meer informatie over deze functie.

Eigenschappen instellen en ophalen

Als u eigenschappen voor een blob wilt instellen, gebruikt u de volgende methode:

Alle eigenschappen die niet expliciet zijn ingesteld, worden gewist. Als u bestaande eigenschappen wilt behouden, kunt u eerst de blobeigenschappen ophalen en deze vervolgens gebruiken om de headers te vullen die niet worden bijgewerkt.

In het volgende codevoorbeeld worden de content_type en content_language systeemeigenschappen op een blob ingesteld, terwijl de bestaande eigenschappen behouden blijven:

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)

Gebruik de volgende methode om eigenschappen op een blob op te halen:

In het volgende codevoorbeeld worden de systeemeigenschappen van een blob opgehaald en worden enkele van de waarden weergegeven:

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

Metagegevens instellen en ophalen

U kunt metagegevens opgeven als een of meer naam-waardeparen op een blob of containerresource. Als u metagegevens wilt instellen, verzendt u een woordenlijst met naam-waardeparen met behulp van de volgende methode:

In het volgende codevoorbeeld worden metagegevens voor een blob ingesteld:

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)

Als u metagegevens wilt ophalen, roept u de get_blob_properties methode in uw blob aan om de verzameling metagegevens te vullen en leest u de waarden, zoals wordt weergegeven in het onderstaande voorbeeld. De get_blob_properties methode haalt blobeigenschappen en metagegevens op door zowel de bewerking Blob-eigenschappen ophalen als de bewerking Blobmetagegevens ophalen aan te roepen.

In het volgende codevoorbeeld worden metagegevens op een blob gelezen en worden elke sleutel/waardepaar afgedrukt:

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)

Blobmetagegevens asynchroon instellen

De Azure Blob Storage-clientbibliotheek voor Python ondersteunt het asynchroon beheren van blobeigenschappen en metagegevens. Zie Asynchrone programmering voor meer informatie over de vereisten voor het instellen van projecten.

Volg deze stappen om blobmetagegevens in te stellen met behulp van asynchrone API's:

  1. Voeg de volgende importinstructies toe:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient
    
  2. Voeg code toe om het programma uit te voeren met behulp van asyncio.run. Met deze functie wordt de doorgegeven coroutine uitgevoerd in main() ons voorbeeld en wordt de asyncio gebeurtenislus beheerd. Coroutines worden gedeclareerd met de syntaxis async/await. In dit voorbeeld maakt de main() coroutine eerst het hoogste niveau BlobServiceClient met behulp van async withen roept vervolgens de methode aan waarmee de metagegevens van de blob worden ingesteld. Houd er rekening mee dat alleen de client op het hoogste niveau moet worden gebruikt async with, omdat andere clients die ermee zijn gemaakt, dezelfde verbindingsgroep delen.

    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. Voeg code toe om de blobmetagegevens in te stellen. De code is hetzelfde als het synchrone voorbeeld, behalve dat de methode wordt gedeclareerd met het async trefwoord en het trefwoord wordt gebruikt bij het await aanroepen van de get_blob_properties en set_blob_metadata methoden.

    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)
    

Met deze basisinstallatie kunt u andere voorbeelden in dit artikel implementeren als coroutines met behulp van async/await syntaxis.

Resources

Zie de volgende resources voor meer informatie over het beheren van systeemeigenschappen en door de gebruiker gedefinieerde metagegevens met behulp van de Azure Blob Storage-clientbibliotheek voor Python.

Codevoorbeelden

  • Synchrone of asynchrone codevoorbeelden weergeven uit dit artikel (GitHub)

REST API-bewerkingen

De Azure SDK voor Python bevat bibliotheken die zijn gebaseerd op de Azure REST API, zodat u kunt communiceren met REST API-bewerkingen via bekende Python-paradigma's. De clientbibliotheekmethoden voor het beheren van systeemeigenschappen en door de gebruiker gedefinieerde metagegevens maken gebruik van de volgende REST API-bewerkingen:

Clientbibliotheekbronnen

  • Dit artikel maakt deel uit van de ontwikkelaarshandleiding voor Blob Storage voor Python. Zie de volledige lijst met artikelen over ontwikkelaarshandleidingen in Uw Python-app bouwen voor meer informatie.