Freigeben über


Verwalten von Blobeigenschaften und Metadaten mit Python

Blobs unterstützen neben den darin enthaltenen Daten auch Systemeigenschaften und benutzerdefinierte Metadaten. In diesem Artikel erfahren Sie, wie Sie Systemeigenschaften und benutzerdefinierte Metadaten mithilfe der Azure Storage-Clientbibliothek für Python verwalten.

Informationen zum Verwalten von Eigenschaften und Metadaten mithilfe asynchroner APIs finden Sie unter Asynchrones Festlegen von Blobmetadaten.

Voraussetzungen

Erstellen Ihrer Umgebung

Wenn Sie kein vorhandenes Projekt haben, wird in diesem Abschnitt gezeigt, wie Sie ein Projekt für die Arbeit mit der Azure Blob Storage-Clientbibliothek für Python einrichten. Weitere Details finden Sie unter Erste Schritte mit Azure Blob Storage und Python.

Um die Codebeispiele in diesem Artikel zu verwenden, führen Sie die folgenden Schritte zum Einrichten Ihres Projekts aus.

Installieren von Paketen

Installieren Sie die folgenden Pakete mittels pip install:

pip install azure-storage-blob azure-identity

Hinzufügen von Importanweisungen

Fügen Sie die folgenden import -Anweisungen ein:

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

Autorisierung

Der Autorisierungsmechanismus muss über die erforderlichen Berechtigungen zum Arbeiten mit Containereigenschaften oder -metadaten verfügen. Für die Autorisierung mit Microsoft Entra ID (empfohlen) benötigen Sie mindestens die integrierte Azure RBAC-Rolle Storage-Blobdatenleser für die get-Vorgänge und mindestens Mitwirkender an Storage-Blobdaten für die set-Vorgänge. Weitere Informationen finden Sie in den Autorisierungsanleitungen für Festlegen von Blobeigenschaften (REST-API), Abrufen von Blobeigenschaften (REST-API), Festlegen von Blobmetadaten (REST-API)oder Abrufen von Blobmetadaten (REST-API).

Erstellen eines Clientobjekts

Um eine App mit Blob Storage zu verbinden, erstellen Sie eine Instanz von BlobServiceClient. Das folgende Beispiel zeigt, wie Sie ein Clientobjekt mithilfe von DefaultAzureCredential für die Autorisierung erstellen:

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

Sie können auch Clientobjekte für bestimmte Container oder Blobs erstellen, entweder direkt oder aus dem BlobServiceClient-Objekt. Weitere Informationen zum Erstellen und Verwalten von Clientobjekten finden Sie unter Erstellen und Verwalten von Clientobjekten, die mit Datenressourcen interagieren.

Informationen zu Eigenschaften und Metadaten

  • Systemeigenschaften: Systemeigenschaften sind in jeder Blobspeicherressource vorhanden. Einige davon können gelesen oder festgelegt werden, während andere schreibgeschützt sind. Darüber hinaus entsprechen einige Systemeigenschaften bestimmten HTTP-Standardheadern. Die Azure Storage-Clientbibliothek für Python verwaltet diese Eigenschaften für Sie.

  • Benutzerdefinierte Metadaten: Benutzerdefinierte Metadaten bestehen aus mindestens einem Name-Wert-Paar, das Sie für eine Blobspeicherressource angeben. Metadaten können verwendet werden, um zusätzliche Werte mit der Ressource zu speichern. Metadatenwerte sind nur für Ihre eigenen Zwecke bestimmt und wirken sich nicht auf das Verhalten der Ressource aus.

    Name/Wert-Paare für Metadaten sind gültige HTTP-Header und sollten allen Einschränkungen für HTTP-Header entsprechen. Weitere Informationen zu den Benennungsanforderungen für Metadaten finden Sie unter Metadatennamen.

Hinweis

Blobindextags bieten auch die Möglichkeit, beliebige benutzerdefinierte Schlüssel-Wert-Attribute zusammen mit einer Azure Blob Storage-Ressource zu speichern. Trotz der Ähnlichkeit mit Metadaten werden nur Blobindextags automatisch indiziert und durch den nativen Blob-Dienst suchbar gemacht. Metadaten können nicht indiziert und abgefragt werden, es sei denn, Sie verwenden einen separaten Dienst wie z. B. Azure Search.

Weitere Informationen zu dieser Funktion finden Sie unter Verwalten und Suchen von Daten in Azure Blob Storage mit dem Blobindex (Vorschau).

Festlegen und Abrufen von Eigenschaften

Verwenden Sie die folgende Methode, um Eigenschaften für ein Blob festzulegen:

Alle nicht explizit festgelegten Eigenschaften werden gelöscht. Um vorhandene Eigenschaften beizubehalten, können Sie zunächst die Blobeigenschaften abrufen und dann dazu verwenden, die Header aufzufüllen, die nicht aktualisiert werden.

Im folgenden Codebeispiel werden die Systemeigenschaften content_type und content_language für ein Blob festgelegt, wobei die vorhandenen Eigenschaften beibehalten werden:

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)

Verwenden Sie die folgende Methode, um Eigenschaften für ein Blob abzurufen:

Im folgenden Codebeispiel werden die Systemeigenschaften eines Blobs abgerufen und einige der Werte angezeigt:

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

Festlegen und Abrufen von Metadaten

Sie können Metadaten als ein oder mehrere Name-Wert-Paare für eine Blob- oder Containerressource angeben. Um Metadaten festzulegen, senden Sie ein Wörterbuch mit Name/Wert-Paaren mithilfe der folgenden Methode:

Das folgende Codebeispiel legt die Metadaten für ein Blob fest:

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)

Zum Abrufen von Metadaten rufen Sie die get_blob_properties-Methode für das Blob auf, um die Metadatensammlung zu füllen, und lesen anschließend die Werte wie im Beispiel unten gezeigt. Die get_blob_properties-Methode ruft Blobeigenschaften und Metadaten ab, indem sowohl der Vorgang Blobeigenschaften abrufen als auch der Vorgang Blobmetadaten abrufen aufgerufen wird.

Im folgenden Codebeispiel werden Metadaten für ein Blob gelesen und jedes Schlüssel-Wert-Paar ausgegeben:

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)

Asynchrones Festlegen von Blobmetadaten

Die Azure Blob Storage-Clientbibliothek für Python unterstützt die asynchrone Verwaltung von Blobeigenschaften und -metadaten. Weitere Informationen zu den Projekteinrichtungsanforderungen finden Sie unter Asynchrone Programmierung.

Führen Sie die folgenden Schritte aus, um Blobmetadaten mithilfe asynchroner APIs festzulegen:

  1. Fügen Sie die folgenden import-Anweisungen hinzu:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient
    
  2. Fügen Sie Code hinzu, um das Programm mithilfe von asyncio.run auszuführen. Diese Funktion führt die übergebene Coroutine aus, main() in unserem Beispiel, und verwaltet die Ereignisschleife von asyncio. Coroutinen werden mit der async/await-Syntax deklariert. In diesem Beispiel erstellt die Coroutine main() zunächst den BlobServiceClient auf oberster Ebene mit async with und ruft dann die Methode auf, mit der die Blobmetadaten festgelegt werden. Beachten Sie, dass nur der Client auf oberster Ebene async withverwenden muss, da andere von ihm erstellte Clients denselben Verbindungspool aufweisen.

    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. Fügen Sie Code hinzu, um die Blobmetadaten festzulegen. Der Code ist identisch mit dem synchronen Beispiel, mit der Ausnahme, dass die Methode mit dem Schlüsselwort async deklariert wird und das Schlüsselwort await beim Aufrufen der Methoden get_blob_properties und set_blob_metadata verwendet wird.

    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)
    

Mit dieser grundlegenden Einrichtung können Sie weitere Beispiele in diesem Artikel als Coroutinen mit async/await-Syntax implementieren.

Ressourcen

Weitere Informationen zum Verwalten von Systemeigenschaften und benutzerdefinierten Metadaten mithilfe der Azure Blob Storage-Clientbibliothek für Python finden Sie unter den folgenden Ressourcen.

Codebeispiele

REST-API-Vorgänge

Das Azure-SDK für Python enthält Bibliotheken, die auf der Azure-REST-API basieren, und ermöglicht Ihnen so die Interaktion mit REST-API-Vorgängen über vertraute Python-Paradigmen. Die Methoden der Clientbibliothek zum Verwalten von Systemeigenschaften und benutzerdefinierten Metadaten verwenden die folgenden REST-API-Vorgänge:

Ressourcen zur Clientbibliothek

  • Dieser Artikel ist Teil des Blob Storage-Entwicklerleitfadens für Python. Weitere Informationen finden Sie in der vollständigen Liste der Entwicklerleitfadenartikel unter Erstellen Ihrer Python-App.