Udostępnij za pomocą


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 oraz jak przywracać miękko usunięte obiekty blob w trakcie okresu przechowywania danych.

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

Wymagania wstępne

Konfigurowanie środowiska

Jeśli nie masz istniejącego projektu, w tej sekcji pokazano, jak skonfigurować projekt do pracy z biblioteką klienta usługi Azure Blob Storage dla języka Python. Aby uzyskać więcej informacji, zobacz Rozpoczynanie pracy z usługami Azure Blob Storage i Python.

Aby pracować z przykładami kodu w tym artykule, wykonaj następujące kroki, aby skonfigurować projekt.

Instalowanie pakietów

Zainstaluj następujące pakiety przy użyciu polecenia pip install:

pip install azure-storage-blob azure-identity

Dodaj instrukcje importu

Dodaj następujące instrukcje import:

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

Autoryzacja

Mechanizm autoryzacji musi mieć niezbędne uprawnienia do usunięcia obiektu blob lub przywrócenia miękko usuniętego obiektu blob. Aby uzyskać autoryzację przy użyciu Microsoft Entra ID (zalecane), potrzebujesz wbudowanej roli Azure RBAC Storage Blob Data Contributor lub wyższej. Aby dowiedzieć się więcej, zobacz porady dotyczące autoryzacji dla usuwanie obiektu blob (interfejs API REST) i przywracanie obiektu blob (interfejs API REST).

Tworzenie obiektu klienta

Aby połączyć aplikację z usługą Blob Storage, utwórz wystąpienie BlobServiceClient. W poniższym przykładzie pokazano, jak utworzyć obiekt klienta przy użyciu DefaultAzureCredential autoryzacji:

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

Można również tworzyć obiekty klienta dla określonych kontenerów lub obiektów blob, bezpośrednio lub z obiektu BlobServiceClient. Aby dowiedzieć się więcej na temat tworzenia obiektów klienta i zarządzania nimi, zobacz Tworzenie obiektów klienta korzystających z zasobów danych i zarządzanie nimi.

Usuń blob

Uwaga

Jeśli miękkie usuwanie obiektu blob jest włączone dla konta magazynu, nie można wykonać trwałego usuwania, używając metod klienta biblioteki. Korzystając z metod w tym artykule, tymczasowo usunięty obiekt blob, jego wersja lub migawka pozostaje dostępny aż do wygaśnięcia okresu przechowywania, po którym zostanie trwale usunięty. Aby dowiedzieć się więcej na temat podstawowej operacji interfejsu API REST, zobacz Usuwanie obiektu blob (interfejs API REST).

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 jakiekolwiek skojarzone migawki, musisz usunąć wszystkie te migawki, aby usunąć obiekt blob. Poniższy przykład usuwa obiekt typu 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, należy użyć parametru delete_snapshots="only".

Przywróć usunięty obiekt blob

Miękkie usuwanie obiektu blob chroni pojedynczy obiekt blob, jego wersje, migawki i metadane przed przypadkowym usunięciem lub zastąpieniem, utrzymując usunięte dane w systemie przez określony czas. Podczas okresu przechowywania możesz przywrócić obiekt blob do stanu, w jakim znajdował się w momencie usunięcia. Po wygaśnięciu okresu przechowywania obiekt blob zostanie usunięty trwale. Aby uzyskać więcej informacji na temat miękkiego usuwania obiektów blob, zobacz Miękkie usuwanie dla obiektów blob.

Możesz użyć bibliotek klienckich usługi Azure Storage do przywrócenia miękko usuniętego obiektu blob lub migawki.

Sposób, w jaki przywracasz tymczasowo usunięty obiekt blob, zależy od tego, czy konto magazynu ma włączone przechowywanie wersji obiektów blob, czy nie. 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 tymczasowo usuniętych obiektów, gdy wersjonowanie 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 miękko usuniętego obiektu blob oraz wszystkie skojarzone miękko usunięte migawki. 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()

Przywróć nietrwale usunięte obiekty, gdy wersjonowanie jest włączone.

Jeśli konto magazynu jest skonfigurowane do włączania wersjonowania obiektów blob, usunięcie obiektu blob powoduje, że jego bieżąca wersja staje się poprzednią wersją. Aby przywrócić tymczasowo usunięty obiekt blob, gdy przechowywanie wersji jest włączone, skopiuj poprzednią wersję do bazowego 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)

Usuń obiekt blob asynchronicznie

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ą korutynę w naszym przykładzie main() i zarządza pętlą zdarzeń asyncio. Coroutines są deklarowane za pomocą składni async/await. W tym przykładzie main() coroutine najpierw tworzy najwyższy poziom BlobServiceClient przy użyciu async with, a następnie wywołuje metodę, która usuwa 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ąć blob. Kod jest taki sam jak w przykładzie synchronicznym, z tą różnicą, że metoda jest zadeklarowana z użyciem słowa kluczowego async, a słowo kluczowe await stosuje się przy wywołaniu metody 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()
    

Ta podstawowa konfiguracja pozwala na zaimplementowanie innych przykładów w tym artykule jako korutyny przy użyciu składni async/await.

Zasoby

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

Przykłady kodu

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:

Zasoby biblioteki klienta

Zobacz też

  • Ten artykuł jest częścią przewodnika dla deweloperów usługi Blob Storage dla języka Python. Aby dowiedzieć się więcej, zobacz pełną listę artykułów z przewodnika dla deweloperów w temacie Tworzenie aplikacji w języku Python.