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 oraz jak przywracać obiekty blob usunięte nietrwale 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

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

Dodawanie instrukcji importu

Dodaj następujące instrukcje import:

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

Autoryzacja

Mechanizm autoryzacji musi mieć uprawnienia niezbędne do usunięcia obiektu blob lub przywrócenia nietrwałego obiektu blob. Aby uzyskać autoryzację przy użyciu identyfikatora Entra firmy Microsoft (zalecane), potrzebujesz wbudowanej kontroli dostępu opartej na rolach platformy Azure współautora danych obiektów blob usługi Storage lub nowszego. Aby dowiedzieć się więcej, zobacz wskazówki dotyczące autoryzacji dotyczące usuwania obiektów blob (interfejsu API REST) i cofania usuwania obiektu blob (interfejs API REST).

Tworzenie obiektu klienta

Aby połączyć aplikację z usługą Blob Storage, utwórz wystąpienie klasy 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 BlobServiceClient obiektu. 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.

Usuwanie obiektu blob

Uwaga

Jeśli usuwanie nietrwałe obiektu blob jest włączone dla konta magazynu, nie można wykonać trwałego usuwania przy użyciu metod biblioteki klienta. Korzystając z metod w tym artykule, usunięty nietrwale obiekt blob, wersja obiektu blob lub migawka pozostaje dostępny do momentu wygaśnięcia okresu przechowywania, w którym momencie 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 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 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.