Управление свойствами и метаданными контейнера с помощью Python
Помимо данных, которые они содержат, контейнеры BLOB-объектов поддерживают свойства системы и пользовательские метаданные. В этой статье показано, как управлять свойствами системы и пользовательскими метаданными с помощью клиентской библиотеки служба хранилища Azure для Python.
Сведения об управлении свойствами и метаданными с помощью асинхронных 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-объектов хранилища ролей Azure RBAC или более поздней версии для операций получения, а также участник данных BLOB-объектов хранилища или более поздней версии для операций набора. Дополнительные сведения см. в руководстве по авторизации для получения свойств контейнера (REST API), задания метаданных контейнера (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
объекта. Дополнительные сведения о создании клиентских объектов и управлении ими см. в статье "Создание клиентских объектов и управление ими", взаимодействующих с ресурсами данных.
Сведения о свойствах и метаданных
Системные свойства: свойства системы существуют в каждом ресурсе хранилища BLOB-объектов. Некоторые из них можно считать или задать, некоторые — только считать. За кулисами некоторые системные свойства соответствуют определенным стандартным заголовкам HTTP. Клиентская библиотека служба хранилища Azure для Python поддерживает эти свойства.
Определяемые пользователем метаданные: такие метаданные состоят из одной или нескольких пар "имя-значение", которые можно указать для ресурса хранилища BLOB-объектов. Вы можете использовать метаданные для хранения дополнительных значений с помощью ресурса хранилища. Значения метаданных предназначены только для ваших собственных целей и не влияют на поведение ресурса.
Пары имен и значений метаданных являются допустимыми HTTP-заголовками, поэтому они должны соответствовать всем ограничениям для HTTP-заголовков. Дополнительные сведения о требованиях к именованию метаданных см. в разделе "Имена метаданных".
Получение свойств контейнера
Чтобы получить свойства контейнера, используйте следующий метод:
В следующем примере кода извлекается системные свойства контейнера и записывается значения свойств в окно консоли:
def get_properties(self, blob_service_client: BlobServiceClient, container_name):
container_client = blob_service_client.get_container_client(container=container_name)
properties = container_client.get_container_properties()
print(f"Public access type: {properties.public_access}")
print(f"Lease status: {properties.lease.status}")
print(f"Lease state: {properties.lease.state}")
print(f"Has immutability policy: {properties.has_immutability_policy}")
Задание и извлечение метаданных
Метаданные можно указать как одну или несколько пар "имя-значение" для BLOB-ресурса или ресурса контейнера. Чтобы задать метаданные, используйте следующий метод:
Задание метаданных контейнера перезаписывает все существующие метаданные, связанные с контейнером. Невозможно изменить отдельную пару "имя-значение".
Следующий пример кода задает метаданные в контейнере:
def set_metadata(self, blob_service_client: BlobServiceClient, container_name):
container_client = blob_service_client.get_container_client(container=container_name)
# Retrieve existing metadata, if desired
metadata = container_client.get_container_properties().metadata
more_metadata = {'docType': 'text', 'docCategory': 'reference'}
metadata.update(more_metadata)
# Set metadata on the container
container_client.set_container_metadata(metadata=metadata)
Чтобы получить метаданные, вызовите следующий метод:
Следующий пример считывается в значениях метаданных:
def get_metadata(self, blob_service_client: BlobServiceClient, container_name):
container_client = blob_service_client.get_container_client(container=container_name)
# Retrieve existing metadata, if desired
metadata = container_client.get_container_properties().metadata
for k, v in metadata.items():
print(k, v)
Асинхронно настройка метаданных контейнера
Клиентская библиотека Хранилище BLOB-объектов Azure для Python поддерживает асинхронное управление свойствами контейнеров и метаданными. Дополнительные сведения о требованиях к настройке проекта см. в статье асинхронное программирование.
Выполните следующие действия, чтобы задать метаданные контейнера с помощью асинхронных 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.set_metadata(blob_service_client, "sample-container") if __name__ == '__main__': asyncio.run(main())
Добавьте код для задания метаданных контейнера. Код совпадает с синхронным примером, за исключением того, что метод объявлен с
async
ключевым словом, аawait
ключевое слово используется при вызовеget_container_properties
методов иset_container_metadata
методов.async def set_metadata(self, blob_service_client: BlobServiceClient, container_name): container_client = blob_service_client.get_container_client(container=container_name) # Retrieve existing metadata, if desired metadata = (await container_client.get_container_properties()).metadata more_metadata = {'docType': 'text', 'docCategory': 'reference'} metadata.update(more_metadata) # Set metadata on the container await container_client.set_container_metadata(metadata=metadata)
С помощью этой базовой настройки вы можете реализовать другие примеры в этой статье в качестве корутин с помощью синтаксиса async/await.
Ресурсы
Дополнительные сведения о настройке и получении свойств контейнера и метаданных с помощью клиентской библиотеки Хранилище BLOB-объектов Azure для Python см. в следующих ресурсах.
Примеры кода
- Просмотр примеров синхронного или асинхронного кода из этой статьи (GitHub)
Операции REST API
Пакет SDK Azure для Python содержит библиотеки, которые создаются на основе REST API Azure, что позволяет взаимодействовать с операциями REST API с помощью знакомых парадигм Python. Методы клиентской библиотеки для задания и получения свойств и метаданных используют следующие операции REST API:
- Получение свойств контейнера (REST API)
- Настройка метаданных контейнера (REST API)
- Получение метаданных контейнера (REST API)
Метод get_container_properties
извлекает свойства контейнера и метаданные, вызывая операцию Get Container Properties и операцию Get Container Metadata .
Ресурсы клиентской библиотеки
Связанный контент
- Эта статья является частью руководства разработчика хранилища BLOB-объектов для Python. Дополнительные сведения см. в полном списке статей руководства разработчика по созданию приложения Python.