Поделиться через


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

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

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

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

Настройка среды

Если у вас нет существующего проекта, в этом разделе показано, как настроить проект для работы с клиентской библиотекой Хранилище 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, ContentSettings

Авторизация

Механизм авторизации должен иметь необходимые разрешения для работы со свойствами контейнера или метаданными. Для авторизации с помощью идентификатора Microsoft Entra (рекомендуется), для операций получения необходимо использовать встроенное средство чтения данных BLOB-объектов хранилища ролей Azure RBAC или более поздней версии для операций получения, а также участник данных BLOB-объектов хранилища или более поздней версии для операций набора. Дополнительные сведения см. в руководстве по авторизации для задания свойств BLOB-объектов (REST API), получения свойств BLOB-объектов (REST API), задания метаданных BLOB-объектов (REST API) или получения метаданных BLOB-объектов (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-заголовков. Дополнительные сведения о требованиях к именованию метаданных см. в разделе "Имена метаданных".

Примечание.

Теги индекса BLOB-объектов также предоставляют возможность хранения произвольных пользовательских атрибутов ключа и значения наряду с ресурсом хранилища BLOB-объектов Azure. Аналогично метаданным только теги индекса BLOB-объектов автоматически индексируются и делаются доступными для поиска в собственной службе BLOB-объектов. Метаданные не могут индексироваться и запрашиваться, если не используется отдельная служба, например поиск Azure.

Дополнительные сведения об этой функции см. в статье Управление данными в хранилище BLOB-объектов Azure и их поиск с помощью индекса больших двоичных объектов (предварительная версия).

Задание и извлечение свойств

Чтобы задать свойства большого двоичного объекта, используйте следующий метод:

Все свойства, не заданные явно, очищаются. Чтобы сохранить существующие свойства, сначала можно получить свойства БОЛЬШОго двоичного объекта, а затем использовать их для заполнения заголовков, которые не обновляются.

В следующем примере кода задаются content_type и content_language системные свойства большого двоичного объекта, сохраняя существующие свойства:

def set_properties(self, blob_service_client: BlobServiceClient, container_name):
    blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")

    # Get the existing blob properties
    properties = blob_client.get_blob_properties()

    # Set the content_type and content_language headers, and populate the remaining headers from the existing properties
    blob_headers = ContentSettings(content_type="text/plain",
                                   content_encoding=properties.content_settings.content_encoding,
                                   content_language="en-US",
                                   content_disposition=properties.content_settings.content_disposition,
                                   cache_control=properties.content_settings.cache_control,
                                   content_md5=properties.content_settings.content_md5)
    
    blob_client.set_http_headers(blob_headers)

Чтобы получить свойства большого двоичного объекта, используйте следующий метод:

Следующий пример кода получает системные свойства большого двоичного объекта и отображает некоторые значения:

def get_properties(self, blob_service_client: BlobServiceClient, container_name):
    blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")

    properties = blob_client.get_blob_properties()

    print(f"Blob type: {properties.blob_type}")
    print(f"Blob size: {properties.size}")
    print(f"Content type: {properties.content_settings.content_type}")
    print(f"Content language: {properties.content_settings.content_language}")

Задание и извлечение метаданных

Метаданные можно указать как одну или несколько пар "имя-значение" для BLOB-ресурса или ресурса контейнера. Чтобы задать метаданные, отправьте словарь , содержащий пары "имя-значение", используя следующий метод:

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

def set_metadata(self, blob_service_client: BlobServiceClient, container_name):
    blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")

    # Retrieve existing metadata, if desired
    blob_metadata = blob_client.get_blob_properties().metadata

    more_blob_metadata = {'docType': 'text', 'docCategory': 'reference'}
    blob_metadata.update(more_blob_metadata)

    # Set metadata on the blob
    blob_client.set_blob_metadata(metadata=blob_metadata)

Чтобы получить метаданные, вызовите метод get_blob_properties в большом двоичном объекте, чтобы заполнить коллекцию метаданных, а затем прочитать значения, как показано в примере ниже. Метод get_blob_properties извлекает свойства и метаданные большого двоичного объекта, вызывая операцию "Свойства BLOB-объектов " и операцию get BLOB-метаданных .

В следующем примере кода считываются метаданные большого двоичного объекта и выводится каждая пара "ключ-значение":

def get_metadata(self, blob_service_client: BlobServiceClient, container_name):
    blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")

    # Retrieve existing metadata, if desired
    blob_metadata = blob_client.get_blob_properties().metadata

    for k, v in blob_metadata.items():
        print(k, v)

Асинхронно настройка метаданных BLOB-объектов

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

Выполните следующие действия, чтобы задать метаданные 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 = 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.set_metadata(blob_service_client, "sample-container")
    
    if __name__ == '__main__':
        asyncio.run(main())
    
  3. Добавьте код для задания метаданных БОЛЬШОго двоичного объекта. Код совпадает с синхронным примером, за исключением того, что метод объявлен с async ключевым словом, а await ключевое слово используется при вызове get_blob_properties методов и set_blob_metadata методов.

    async def set_metadata(self, blob_service_client: BlobServiceClient, container_name):
        blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")
    
        # Retrieve existing metadata, if desired
        properties = await blob_client.get_blob_properties()
        blob_metadata = properties.metadata
    
        more_blob_metadata = {'docType': 'text', 'docCategory': 'reference'}
        blob_metadata.update(more_blob_metadata)
    
        # Set metadata on the blob
        await blob_client.set_blob_metadata(metadata=blob_metadata)
    

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

Ресурсы

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

Примеры кода

Операции REST API

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

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

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