Удаление и восстановление контейнера BLOB-объектов с помощью Python
В этой статье показано, как удалить контейнеры с помощью клиентской библиотеки служба хранилища Azure для Python. Если вы включили обратимое удаление контейнера, можно восстановить удаленные контейнеры.
Сведения об удалении контейнера BLOB-объектов с помощью асинхронных API см. в статье "Удаление контейнера асинхронно".
Необходимые компоненты
- Подписка Azure — создайте бесплатную учетную запись.
- Учетная запись хранения Azure — создайте такую учетную запись.
- Python 3.8+
Настройка среды
Если у вас нет существующего проекта, в этом разделе показано, как настроить проект для работы с клиентской библиотекой Хранилище BLOB-объектов Azure для Python. Дополнительные сведения см. в статье "Начало работы с Хранилище BLOB-объектов Azure и Python".
Чтобы работать с примерами кода в этой статье, выполните следующие действия, чтобы настроить проект.
Установка пакетов
Установите следующие пакеты с помощью pip install
:
pip install azure-storage-blob azure-identity
Добавление инструкций импорта
Добавьте следующие операторы import
:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
Авторизация
Механизм авторизации должен иметь необходимые разрешения для удаления или восстановления контейнера. Для авторизации с помощью идентификатора Microsoft Entra (рекомендуется), требуется встроенный участник данных хранилища BLOB-объектов хранилища ролей или более поздней версии. Дополнительные сведения см. в руководстве по авторизации для удаления контейнера (REST API) и восстановления контейнера (REST API).
Создание клиентского объекта
Чтобы подключить приложение к хранилищу BLOB-объектов, создайте экземпляр BLOBServiceClient. В следующем примере показано, как создать клиентский объект с помощью DefaultAzureCredential
авторизации:
# 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)
Можно также создавать клиентские объекты для определенных контейнеров или больших двоичных объектов напрямую или из BlobServiceClient
объекта. Дополнительные сведения о создании клиентских объектов и управлении ими см. в статье "Создание клиентских объектов и управление ими", взаимодействующих с ресурсами данных.
Удаление контейнера
Чтобы удалить контейнер в 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:
Добавьте в файл следующие операторы импорта:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient
Добавьте код для запуска программы с помощью
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())
Добавьте код для удаления контейнера. Код совпадает с синхронным примером, за исключением того, что метод объявляется с
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 см. в следующих ресурсах.
Примеры кода
- Просмотр примеров синхронного или асинхронного кода из этой статьи (GitHub)
Операции REST API
Пакет SDK Azure для Python содержит библиотеки, которые создаются на основе REST API Azure, что позволяет взаимодействовать с операциями REST API с помощью знакомых парадигм Python. Методы клиентской библиотеки для удаления или восстановления контейнера используют следующие операции REST API:
- Удаление контейнера (REST API)
- Восстановление контейнера (REST API)
Ресурсы клиентской библиотеки
См. также
Связанный контент
- Эта статья является частью руководства разработчика хранилища BLOB-объектов для Python. Дополнительные сведения см. в полном списке статей руководства разработчика по созданию приложения Python.