Teilen über


Löschen und Wiederherstellen eines Blobs mit Python

In diesem Artikel wird beschrieben, wie Blobs mithilfe der Azure Storage-Clientbibliothek für Python gelöscht werden. Wenn Sie vorläufiges Löschen für Blobs aktiviert haben, können Sie gelöschte Blobs während des Aufbewahrungszeitraums wiederherstellen.

Informationen zum Löschen eines Blobs mithilfe asynchroner APIs finden Sie unter Asynchrones Löschen eines Blobs.

Voraussetzungen

  • In diesem Artikel wird davon ausgegangen, dass Sie bereits ein Projekt für die Arbeit mit der Azure Blob Storage-Clientbibliothek für Python eingerichtet haben. Informationen zum Einrichten Ihres Projekts – einschließlich Paketinstallation, Hinzufügen von import-Anweisungen und Erstellen eines autorisierten Clientobjekts – finden Sie unter Erste Schritte mit Azure Blob Storage und Python.
  • Informationen zur Verwendung asynchroner APIs in Ihrem Code finden Sie in den Anforderungen im Abschnitt Asynchrone Programmierung.
  • Der Autorisierungsmechanismus muss über Berechtigungen zum Löschen eines Blobs oder zum Wiederherstellen eines vorläufig gelöschten Blobs verfügen. Weitere Informationen finden Sie im Autorisierungsleitfaden für die folgenden REST-API-Vorgänge:

Löschen eines Blobs

Um ein Blob zu löschen, rufen Sie die folgende Methode auf:

Im folgenden Beispiel wird ein Blob gelöscht:

def delete_blob(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str):
    blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)
    blob_client.delete_blob()

Wenn das Blob über zugeordnete Momentaufnahmen verfügt, müssen Sie alle zugehörigen Momentaufnahmen löschen, um das Blob löschen zu können. Im folgenden Beispiel werden ein Blob und dessen Momentaufnahmen gelöscht:

def delete_blob_snapshots(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str):
    blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)
    blob_client.delete_blob(delete_snapshots="include")

Um nur die Momentaufnahmen und nicht das Blob selbst zu löschen, können Sie den delete_snapshots="only"-Parameter übergeben.

Wiederherstellen eines gelöschten Blobs

Vorläufiges Löschen von Blobs schützt ein einzelnes Blob sowie seine Versionen, Momentaufnahmen und Metadaten vor versehentlichen Lösch- oder Überschreibungsvorgängen, da die Daten für einen gewissen Zeitraum im System verbleiben. Während der Beibehaltungsdauer kann das Blob in dem Zustand wiederhergestellt werden, in dem es sich zum Zeitpunkt der Löschung befand. Nach Ablauf der Beibehaltungsdauer wird das Blob endgültig gelöscht. Weitere Informationen zum vorläufigen Löschen von Blobs finden Sie unter Vorläufiges Löschen für Blobs.

Sie können die Azure Storage-Clientbibliotheken verwenden, um vorläufig gelöschte Blobs oder Momentaufnahmen wiederherzustellen.

Wie Sie ein vorläufig gelöschtes Blob wiederherstellen, hängt davon ab, ob für Ihr Speicherkonto die Blobversionsverwaltung aktiviert ist. Weitere Informationen zur Blobversionsverwaltung finden Sie unter Blobversionsverwaltung. Lesen Sie je nach Ihrem Szenario einen der folgenden Abschnitte:

Wiederherstellen vorläufig gelöschter Objekte bei deaktivierter Versionsverwaltung

Um gelöschte Blobs wiederherzustellen, wenn die Versionsverwaltung deaktiviert ist, rufen Sie die folgende Methode auf:

Mit dieser Methode werden der Inhalt und die Metadaten eines vorläufig gelöschten Blobs und aller zugeordneten vorläufig gelöschten Momentaufnahmen wiederhergestellt. Das Aufrufen dieser Methode für ein nicht gelöschtes Blob hat keine Auswirkungen.

def restore_blob(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str):
    blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)
    blob_client.undelete_blob()

Wiederherstellen vorläufig gelöschter Objekte bei aktivierter Versionsverwaltung

Wenn ein Speicherkonto für die Aktivierung der Blobversionsverwaltung konfiguriert ist, führt das Löschen eines Blobs dazu, dass die aktuelle Version des Blobs zur vorherigen Version wird. Um ein vorläufig gelöschtes Blob bei aktivierter Versionsverwaltung wiederherzustellen, kopieren Sie eine vorherige Version über das Basisblob. Sie können die folgende Methode verwenden:

Im folgenden Codebeispiel wird die neueste Version eines gelöschten Blobs abgerufen und die aktuellste Version durch Kopieren in das Basisblob wiederhergestellt:

def restore_blob_version(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str):
    container_client = blob_service_client.get_container_client(container=container_name)

    # Get a reference to the soft-deleted base blob and list all the blob versions
    blob_client = container_client.get_blob_client(blob=blob_name)
    blob_list = container_client.list_blobs(name_starts_with=blob_name, include=['deleted','versions'])
    blob_versions = []
    for blob in blob_list:
        blob_versions.append(blob.version_id)
    
    # Get the latest version of the soft-deleted blob
    blob_versions.sort(reverse=True)
    latest_version = blob_versions[0]

    # Build the blob URI and add the version ID as a query string
    versioned_blob_url = f"{blob_client.url}?versionId={latest_version}"

    # Restore the latest version by copying it to the base blob
    blob_client.start_copy_from_url(versioned_blob_url)

Asynchrones Löschen eines Blobs

Die Azure Blob Storage-Clientbibliothek für Python unterstützt das asynchrone Löschen von Blobs. Weitere Informationen zu den Projekteinrichtungsanforderungen finden Sie unter Asynchrone Programmierung.

Führen Sie die folgenden Schritte aus, um ein Blob mithilfe asynchroner APIs zu löschen:

  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 die oberste Ebene von BlobServiceClient mit async with und ruft dann die Methode auf, die das Blob löscht. 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.delete_blob(blob_service_client, "sample-container", "sample-blob.txt")
    
    if __name__ == '__main__':
        asyncio.run(main())
    
  3. Fügen Sie Code zum Löschen des Blobs hinzu. 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 Methode „delete_blob“ verwendet wird.

    async def delete_blob(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str):
        blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)
        await blob_client.delete_blob()
    

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

Ressourcen

Weitere Informationen zum Löschen von Blobs und Wiederherstellen gelöschter Blobs mithilfe der Azure Blob Storage-Clientbibliothek für Python finden Sie in unter folgenden Ressourcen.

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 Löschen oder Wiederherstellen von Blobs verwenden die folgenden REST-API-Vorgänge:

Codebeispiele

Ressourcen zur Clientbibliothek

Weitere Informationen