Удаление и восстановление контейнера BLOB-объектов с помощью Python

В этой статье показано, как удалить контейнеры с помощью клиентской библиотеки служба хранилища Azure для Python. Если вы включили обратимое удаление контейнера, можно восстановить удаленные контейнеры.

Сведения об удалении контейнера BLOB-объектов с помощью асинхронных API см. в статье "Удаление контейнера асинхронно".

Необходимые компоненты

  • В этой статье предполагается, что у вас уже есть проект, настроенный для работы с клиентской библиотекой Хранилище BLOB-объектов Azure для Python. Сведения о настройке проекта, включая установку пакета, добавление import инструкций и создание авторизованного клиентского объекта, см. в статье "Начало работы с Хранилище BLOB-объектов Azure и Python".
  • Механизм авторизации должен иметь разрешения на удаление контейнера BLOB-объектов или восстановление обратимого удаленного контейнера. Дополнительные сведения см. в руководстве по авторизации для следующих операций REST API:

Удаление контейнера

Чтобы удалить контейнер в Python, используйте следующий метод из класса BlobServiceClient :

Контейнер можно также удалить с помощью следующего метода из класса ContainerClient :

После удаления контейнера вы не сможете создать контейнер с тем же именем в течение как минимум 30 секунд. При попытке создать контейнер с тем же именем произойдет сбой с кодом 409 (Conflict)ошибки HTTP. Любые другие операции с контейнером или большими двоичными объектами, содержащимися в ней, завершаются ошибкой HTTP 404 (Not Found).

В следующем примере для удаления указанного контейнера используется BlobServiceClient объект:

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

В следующем примере показано, как удалить все контейнеры, начинающиеся с указанного префикса:

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

Восстановление удаленного контейнера

Если обратимое удаление контейнера включено для учетной записи хранения, удаленный контейнер и его содержимое могут быть восстановлены в течение указанного периода хранения. Дополнительные сведения о обратимом удалении контейнера см. в статье "Включение обратимого удаления и управление ими" для контейнеров. Можно восстановить обратимо удаленный контейнер, вызвав следующий метод BlobServiceClient класса:

Следующий пример находит удаленный контейнер, получает версию удаленного контейнера, а затем передает версию undelete_container в метод для восстановления контейнера.

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)

Удаление контейнера асинхронно

Клиентская библиотека Хранилище BLOB-объектов Azure для Python поддерживает асинхронное удаление контейнера BLOB-объектов. Дополнительные сведения о требованиях к настройке проекта см. в статье асинхронное программирование.

Выполните следующие действия, чтобы удалить контейнер с помощью асинхронных API:

  1. Добавьте в файл следующие операторы импорта:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient
    
  2. Добавьте код для запуска программы с помощью asyncio.run. Эта функция запускает переданную корутину в main() нашем примере и управляет циклом asyncio событий. Корутины объявляются с синтаксисом async/await. В этом примере main() корутин сначала создает верхний уровень BlobServiceClient с помощью async with, а затем вызывает метод, который удаляет контейнер. Обратите внимание, что использовать только клиент верхнего уровня, так как другие клиенты, созданные из него, используют async withтот же пул подключений.

    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. Добавьте код для удаления контейнера. Код совпадает с синхронным примером, за исключением того, что метод объявляется с async ключевое слово, а await при вызове delete_container метода используется ключевое слово.

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

С помощью этой базовой настройки вы можете реализовать другие примеры в этой статье в качестве корутин с помощью синтаксиса async/await.

Ресурсы

Дополнительные сведения об удалении контейнера с помощью клиентской библиотеки Хранилище BLOB-объектов Azure для Python см. в следующих ресурсах.

Операции REST API

Пакет SDK Azure для Python содержит библиотеки, которые создаются на основе REST API Azure, что позволяет взаимодействовать с операциями REST API с помощью знакомых парадигм Python. Методы клиентской библиотеки для удаления или восстановления контейнера используют следующие операции REST API:

Примеры кода

Ресурсы клиентской библиотеки

См. также