Share via


Een blob verwijderen en herstellen met Python

In dit artikel wordt beschreven hoe u blobs verwijdert met behulp van de Azure Storage-clientbibliotheek voor Python en hoe u voorlopig verwijderde blobs herstelt tijdens de bewaarperiode.

Zie Een blob asynchroon verwijderen voor meer informatie over het verwijderen van een blob 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

Autorisatie

Het autorisatiemechanisme moet over de benodigde machtigingen beschikken om een blob te verwijderen of om een voorlopig verwijderde blob te herstellen. Voor autorisatie met Microsoft Entra ID (aanbevolen) hebt u ingebouwde Azure RBAC-rol Opslagblobgegevensbijdrager of hoger nodig. Zie de autorisatierichtlijnen voor Delete Blob (REST API) en Undelete Blob (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.

Een blob verwijderen

Notitie

Wanneer voorlopig verwijderen van blobs is ingeschakeld voor een opslagaccount, kunt u geen permanente verwijdering uitvoeren met behulp van clientbibliotheekmethoden. Met behulp van de methoden in dit artikel blijft een voorlopig verwijderde blob, blobversie of momentopname beschikbaar totdat de bewaarperiode verloopt, waarna deze definitief wordt verwijderd. Zie Blob (REST API) verwijderen voor meer informatie over de onderliggende REST API-bewerking.

Als u een blob wilt verwijderen, roept u de volgende methode aan:

In het volgende voorbeeld wordt een blob verwijderd:

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

Als de blob gekoppelde momentopnamen heeft, moet u alle momentopnamen verwijderen om de blob te verwijderen. In het volgende voorbeeld worden een blob en de bijbehorende momentopnamen verwijderd:

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

Als u alleen de momentopnamen en niet de blob zelf wilt verwijderen, kunt u de parameter delete_snapshots="only"doorgeven.

Een verwijderde blob herstellen

Met voorlopig verwijderen van blobs wordt een afzonderlijke blob en zijn versies, momentopnamen en metagegevens beschermd tegen onbedoeld verwijderen of overschrijven door de verwijderde gegevens gedurende een opgegeven periode in het systeem te behouden. Tijdens de retentieperiode kunt u de blob herstellen naar de status die deze had bij het verwijderen. Nadat de retentieperiode is verlopen, wordt de blob definitief verwijderd. Zie Voorlopig verwijderen voor blobs voor meer informatie over voorlopig verwijderen van blobs.

U kunt de Azure Storage-clientbibliotheken gebruiken om een voorlopig verwijderde blob of momentopname te herstellen.

Hoe u een voorlopig verwijderde blob herstelt, is afhankelijk van of voor uw opslagaccount blobversiebeheer is ingeschakeld. Zie Blob-versiebeheer voor meer informatie over blobversiebeheer. Bekijk een van de volgende secties, afhankelijk van uw scenario:

Voorlopig verwijderde objecten herstellen wanneer versiebeheer is uitgeschakeld

Als u verwijderde blobs wilt herstellen wanneer versiebeheer is uitgeschakeld, roept u de volgende methode aan:

Met deze methode worden de inhoud en metagegevens van een voorlopig verwijderde blob en eventuele gekoppelde voorlopig verwijderde momentopnamen hersteld. Het aanroepen van deze methode voor een blob die niet is verwijderd, heeft geen effect.

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

Voorlopig verwijderde objecten herstellen wanneer versiebeheer is ingeschakeld

Als een opslagaccount is geconfigureerd om blobversiebeheer in te schakelen, zorgt het verwijderen van een blob ervoor dat de huidige versie van de blob de vorige versie wordt. Als u een voorlopig verwijderde blob wilt herstellen wanneer versiebeheer is ingeschakeld, kopieert u een vorige versie over de basis-blob. U kunt de volgende methode gebruiken:

Het volgende codevoorbeeld haalt de nieuwste versie van een verwijderde blob op en herstelt de nieuwste versie door deze naar de basis-blob te kopiƫren:

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)

Een blob asynchroon verwijderen

De Azure Blob Storage-clientbibliotheek voor Python biedt ondersteuning voor het asynchroon verwijderen van een blob. Zie Asynchrone programmering voor meer informatie over de vereisten voor het instellen van projecten.

Volg deze stappen om een blob te verwijderen 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 blob wordt verwijderd. 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.delete_blob(blob_service_client, "sample-container", "sample-blob.txt")
    
    if __name__ == '__main__':
        asyncio.run(main())
    
  3. Voeg code toe om de blob te verwijderen. De code is hetzelfde als het synchrone voorbeeld, behalve dat de methode wordt gedeclareerd met het async trefwoord en het await trefwoord wordt gebruikt bij het aanroepen van de delete_blob methode.

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

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 verwijderen van blobs en het herstellen van voorlopig verwijderde blobs 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 verwijderen van blobs en het herstellen van verwijderde blobs gebruiken de volgende REST API-bewerkingen:

  • Blob verwijderen (REST API)
  • Blob ongedaan maken (REST API)

Clientbibliotheekbronnen

Zie ook

Volgende stap

  • Dit artikel maakt deel uit van de ontwikkelaarshandleiding voor Blob Storage voor Python. Zie de volledige lijst met artikelen over ontwikkelaarshandleidingen in Build your app.