Udostępnij za pośrednictwem


Usuwanie i przywracanie obiektu blob przy użyciu języka Python

W tym artykule pokazano, jak usuwać obiekty blob przy użyciu biblioteki klienta usługi Azure Storage dla języka Python. Jeśli włączono usuwanie nietrwałe dla obiektów blob, możesz przywrócić usunięte obiekty blob w okresie przechowywania.

Aby dowiedzieć się więcej o usuwaniu obiektu blob przy użyciu asynchronicznych interfejsów API, zobacz Usuwanie obiektu blob asynchronicznie.

Wymagania wstępne

  • W tym artykule założono, że masz już skonfigurowany projekt do pracy z biblioteką klienta usługi Azure Blob Storage dla języka Python. Aby dowiedzieć się więcej na temat konfigurowania projektu, w tym instalacji pakietu, dodawania import instrukcji i tworzenia autoryzowanego obiektu klienta, zobacz Rozpoczynanie pracy z usługami Azure Blob Storage i Python.
  • Aby używać asynchronicznych interfejsów API w kodzie, zobacz wymagania w sekcji Programowanie asynchroniczne.
  • Mechanizm autoryzacji musi mieć uprawnienia do usuwania obiektu blob lub przywracania nietrwałego obiektu blob. Aby dowiedzieć się więcej, zobacz wskazówki dotyczące autoryzacji dla następujących operacji interfejsu API REST:

Usuwanie obiektu blob

Aby usunąć obiekt blob, wywołaj następującą metodę:

Poniższy przykład usuwa obiekt blob:

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

Jeśli obiekt blob ma skojarzone migawki, musisz usunąć wszystkie jego migawki, aby usunąć obiekt blob. Poniższy przykład usuwa obiekt blob i jego migawki:

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

Aby usunąć tylko migawki, a nie sam obiekt blob, możesz przekazać parametr delete_snapshots="only".

Przywracanie usuniętego obiektu blob

Usunięcie nietrwałe obiektu blob chroni pojedynczy obiekt blob i jego poprawki, migawki i metadane przed przypadkowym usunięciem lub zastąpieniem przez utrzymanie usuniętych danych w systemie przez określony okres czasu. Podczas okresu przechowywania możesz przywrócić nietrwale usunięty obiekt blob do jego stanu w momencie usunięcia. Po wygaśnięciu okresu przechowywania obiekt blob zostanie trwale usunięty. Aby uzyskać więcej informacji na temat usuwania nietrwałego obiektu blob, zobacz Usuwanie nietrwałe dla obiektów blob.

Biblioteki klienta usługi Azure Storage umożliwiają przywrócenie nietrwałego obiektu blob lub migawki.

Sposób przywracania nietrwałego obiektu blob zależy od tego, czy konto magazynu ma włączone przechowywanie wersji obiektów blob. Aby uzyskać więcej informacji na temat przechowywania wersji obiektów blob, zobacz Przechowywanie wersji obiektów blob. W zależności od scenariusza zapoznaj się z jedną z następujących sekcji:

Przywracanie obiektów usuniętych nietrwale, gdy przechowywanie wersji jest wyłączone

Aby przywrócić usunięte obiekty blob, gdy przechowywanie wersji jest wyłączone, wywołaj następującą metodę:

Ta metoda przywraca zawartość i metadane nietrwałego obiektu blob oraz wszystkie skojarzone migawki nietrwałe. Wywołanie tej metody dla obiektu blob, który nie został usunięty, nie ma wpływu.

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

Przywracanie obiektów usuniętych nietrwale po włączeniu przechowywania wersji

Jeśli konto magazynu jest skonfigurowane do włączania przechowywania wersji obiektów blob, usunięcie obiektu blob powoduje, że bieżąca wersja obiektu blob stanie się poprzednią wersją. Aby przywrócić obiekt blob usunięty nietrwale podczas włączania przechowywania wersji, skopiuj poprzednią wersję do podstawowego obiektu blob. Można użyć następującej metody:

Poniższy przykład kodu pobiera najnowszą wersję usuniętego obiektu blob i przywraca najnowszą wersję, kopiując go do podstawowego obiektu blob:

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)

Asynchroniczne usuwanie obiektu blob

Biblioteka klienta usługi Azure Blob Storage dla języka Python obsługuje asynchroniczne usuwanie obiektu blob. Aby dowiedzieć się więcej na temat wymagań dotyczących konfiguracji projektu, zobacz Programowanie asynchroniczne.

Wykonaj następujące kroki, aby usunąć obiekt blob przy użyciu asynchronicznych interfejsów API:

  1. Dodaj następujące instrukcje importowania:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient
    
  2. Dodaj kod, aby uruchomić program przy użyciu polecenia asyncio.run. Ta funkcja uruchamia przekazaną kohroutynę w main() naszym przykładzie i zarządza pętlą asyncio zdarzeń. Coroutines są deklarowane za pomocą składni async/await. W tym przykładzie main() coroutine najpierw tworzy najwyższy poziom BlobServiceClient przy użyciu metody async with, a następnie wywołuje metodę, która usuwa obiekt blob. Należy pamiętać, że tylko klient najwyższego poziomu musi używać programu async with, ponieważ inni klienci utworzoni na jego podstawie współużytkować tę samą pulę połączeń.

    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. Dodaj kod, aby usunąć obiekt blob. Kod jest taki sam jak w przykładzie synchronicznym, z tą różnicą, że metoda jest zadeklarowana za async pomocą słowa kluczowego, a await słowo kluczowe jest używane podczas wywoływania delete_blob metody.

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

Ta podstawowa konfiguracja umożliwia zaimplementowanie innych przykładów w tym artykule jako kohroutines przy użyciu składni async/await.

Zasoby

Aby dowiedzieć się więcej na temat usuwania obiektów blob i przywracania usuniętych obiektów blob przy użyciu biblioteki klienta usługi Azure Blob Storage dla języka Python, zobacz następujące zasoby.

Operacje interfejsu API REST

Zestaw Azure SDK dla języka Python zawiera biblioteki, które bazują na interfejsie API REST platformy Azure, umożliwiając interakcję z operacjami interfejsu API REST za pomocą znanych paradygmatów języka Python. Metody biblioteki klienta do usuwania obiektów blob i przywracania usuniętych obiektów blob używają następujących operacji interfejsu API REST:

Przykłady kodu

Zasoby biblioteki klienta

Zobacz też