Usuwanie i przywracanie kontenera obiektów blob za pomocą języka Python

W tym artykule pokazano, jak usunąć kontenery z biblioteką klienta usługi Azure Storage dla języka Python. Jeśli włączono usuwanie nietrwałe kontenera, możesz przywrócić usunięte kontenery.

Aby dowiedzieć się więcej o usuwaniu kontenera obiektów blob przy użyciu asynchronicznych interfejsów API, zobacz Usuwanie kontenera 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.
  • Mechanizm autoryzacji musi mieć uprawnienia do usuwania kontenera obiektów blob lub przywracania kontenera usuniętego nietrwale. Aby dowiedzieć się więcej, zobacz wskazówki dotyczące autoryzacji dla następujących operacji interfejsu API REST:

Usuwanie kontenera

Aby usunąć kontener w języku Python, użyj następującej metody z klasy BlobServiceClient :

Kontener można również usunąć przy użyciu następującej metody z klasy ContainerClient :

Po usunięciu kontenera nie można utworzyć kontenera o tej samej nazwie przez co najmniej 30 sekund. Próba utworzenia kontenera o tej samej nazwie zakończy się niepowodzeniem z kodem 409 (Conflict)błędu HTTP . Wszelkie inne operacje w kontenerze lub obiektach blob, które zawiera, nie powiedzą się z kodem 404 (Not Found)błędu HTTP .

W poniższym przykładzie użyto BlobServiceClient obiektu do usunięcia określonego kontenera:

def delete_container(self, blob_service_client: BlobServiceClient, container_name):
    container_client = blob_service_client.get_container_client(container=container_name)
    container_client.delete_container()

W poniższym przykładzie pokazano, jak usunąć wszystkie kontenery rozpoczynające się od określonego prefiksu:

def delete_container_prefix(self, blob_service_client: BlobServiceClient):
    container_list = list(blob_service_client.list_containers(name_starts_with="test-"))
    assert len(container_list) >= 1

    for container in container_list:
        # Find containers with the specified prefix and delete
        container_client = blob_service_client.get_container_client(container=container.name)
        container_client.delete_container()

Przywracanie usuniętego kontenera

Po włączeniu usuwania nietrwałego kontenera dla konta magazynu usunięty kontener i jego zawartość mogą zostać odzyskane w określonym okresie przechowywania. Aby dowiedzieć się więcej na temat usuwania nietrwałego kontenera, zobacz Włączanie usuwania nietrwałego i zarządzanie nim dla kontenerów. Kontener usunięty nietrwale można przywrócić, wywołując następującą metodę BlobServiceClient klasy:

Poniższy przykład znajduje usunięty kontener, pobiera wersję usuniętego kontenera, a następnie przekazuje wersję do undelete_container metody w celu przywrócenia kontenera.

def restore_deleted_container(self, blob_service_client: BlobServiceClient, container_name):
    container_list = list(
        blob_service_client.list_containers(include_deleted=True))
    assert len(container_list) >= 1

    for container in container_list:
        # Find the deleted container and restore it
        if container.deleted and container.name == container_name:
            restored_container_client = blob_service_client.undelete_container(
                deleted_container_name=container.name, deleted_container_version=container.version)

Asynchroniczne usuwanie kontenera

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

Wykonaj następujące kroki, aby usunąć kontener 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 kontener. 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 = ContainerSamples()
    
        # 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_container(blob_service_client, "sample-container")
    
    if __name__ == '__main__':
        asyncio.run(main())
    
  3. Dodaj kod, aby usunąć kontener. 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_container metody.

    async def delete_container(self, blob_service_client: BlobServiceClient, container_name):
        container_client = blob_service_client.get_container_client(container=container_name)
        await container_client.delete_container()
    

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 kontenera 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 lub przywracania kontenera używają następujących operacji interfejsu API REST:

Przykłady kodu

Zasoby biblioteki klienta

Zobacz też