Dela via


Ta bort och återställa en blob med Python

Den här artikeln visar hur du tar bort blobar med hjälp av Azure Storage-klientbiblioteket för Python och hur du återställer mjuk borttagna blobar under kvarhållningsperioden.

Mer information om hur du tar bort en blob med asynkrona API:er finns i Ta bort en blob asynkront.

Förutsättningar

Konfigurera din miljö

Om du inte har ett befintligt projekt visar det här avsnittet hur du konfigurerar ett projekt för att arbeta med Azure Blob Storage-klientbiblioteket för Python. Mer information finns i Kom igång med Azure Blob Storage och Python.

Följ de här stegen för att konfigurera projektet om du vill arbeta med kodexemplen i den här artikeln.

Installera paket

Installera följande paket med :pip install

pip install azure-storage-blob azure-identity

Lägga till importinstruktioner

Lägg till följande import-uttryck:

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

Auktorisering

Auktoriseringsmekanismen måste ha de behörigheter som krävs för att ta bort en blob eller återställa en mjuk borttagen blob. För auktorisering med Microsoft Entra-ID (rekommenderas) behöver du den inbyggda rollen Storage Blob Data Contributor eller senare. Mer information finns i auktoriseringsvägledningen för Ta bort blob (REST API) och REST-API (Undelete Blob).

Skapa ett klientobjekt

Om du vill ansluta en app till Blob Storage skapar du en instans av BlobServiceClient. I följande exempel visas hur du skapar ett klientobjekt med hjälp av DefaultAzureCredential för auktorisering:

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

Du kan också skapa klientobjekt för specifika containrar eller blobar, antingen direkt eller från objektet BlobServiceClient . Mer information om hur du skapar och hanterar klientobjekt finns i Skapa och hantera klientobjekt som interagerar med dataresurser.

Ta bort en blob

Kommentar

När mjuk borttagning av blobar är aktiverat för ett lagringskonto kan du inte utföra en permanent borttagning med hjälp av klientbiblioteksmetoder. Med hjälp av metoderna i den här artikeln förblir en mjuk borttagen blob, blobversion eller ögonblicksbild tillgänglig tills kvarhållningsperioden upphör att gälla, då den tas bort permanent. Mer information om den underliggande REST API-åtgärden finns i Ta bort blob (REST API).

Om du vill ta bort en blob anropar du följande metod:

I följande exempel tas en blob bort:

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

Om bloben har några associerade ögonblicksbilder måste du ta bort alla dess ögonblicksbilder för att ta bort bloben. I följande exempel tas en blob och dess ögonblicksbilder bort:

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

Om du bara vill ta bort ögonblicksbilderna och inte själva bloben kan du skicka parametern delete_snapshots="only".

Återställa en borttagen blob

Mjuk borttagning av blobar skyddar en enskild blob, versioner, ögonblicksbilder och metadata från oavsiktliga borttagningar eller överskrivningar genom att spara borttagna data i systemet under en angiven tidsperiod. Under kvarhållningsperioden kan du återställa bloben till dess tillstånd när den togs bort. När kvarhållningsperioden har gått ut tas bloben bort permanent. Mer information om mjuk borttagning av blobar finns i Mjuk borttagning för blobar.

Du kan använda Azure Storage-klientbiblioteken för att återställa en mjuk borttagen blob eller ögonblicksbild.

Hur du återställer en mjuk borttagen blob beror på om ditt lagringskonto har blobversionshantering aktiverat eller inte. Mer information om blobversioner finns i Blob-versionshantering. Se något av följande avsnitt, beroende på ditt scenario:

Återställa mjukt borttagna objekt när versionshantering är inaktiverat

Om du vill återställa borttagna blobar när versionshantering är inaktiverat anropar du följande metod:

Den här metoden återställer innehållet och metadata för en mjuk borttagen blob och eventuella associerade ögonblicksbilder med mjuk borttagning. Att anropa den här metoden för en blob som inte har tagits bort har ingen effekt.

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

Återställa mjukt borttagna objekt när versionshantering är aktiverat

Om ett lagringskonto har konfigurerats för att aktivera blobversionshantering blir den aktuella versionen av bloben den tidigare versionen om du tar bort en blob. Om du vill återställa en mjuk borttagen blob när versionshantering är aktiverat kopierar du en tidigare version över basbloben. Du kan använda följande metod:

Följande kodexempel hämtar den senaste versionen av en borttagen blob och återställer den senaste versionen genom att kopiera den till basbloben:

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)

Ta bort en blob asynkront

Azure Blob Storage-klientbiblioteket för Python stöder borttagning av en blob asynkront. Mer information om krav för projektkonfiguration finns i Asynkron programmering.

Följ dessa steg för att ta bort en blob 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 coroutine först den översta nivån BlobServiceClient med och async withanropar sedan metoden som tar bort bloben. 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.delete_blob(blob_service_client, "sample-container", "sample-blob.txt")
    
    if __name__ == '__main__':
        asyncio.run(main())
    
  3. Lägg till kod för att ta bort bloben. Koden är samma som det synkrona exemplet, förutom att metoden deklareras med nyckelordet async och nyckelordet await används när metoden anropas delete_blob .

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

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 tar bort blobar och återställer mjuk borttagna blobar med hjälp av Azure Blob Storage-klientbiblioteket för Python finns i följande resurser.

Kodexempel

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 ta bort blobar och återställa borttagna blobar använder följande REST API-åtgärder:

Klientbiblioteksresurser

Se även

  • Den här artikeln är en del av utvecklarguiden för Blob Storage för Python. Mer information finns i den fullständiga listan över utvecklarguideartiklar i Skapa din Python-app.