Verification: a143cc29221c9be0

Php array merge по ключами

предварительные требования

Для работы с этим примером требуются следующие компоненты:

  • Python 2.7, 3.6 или более поздней версии.
  • Пакет SDK таблиц Azure Cosmos DB для Python. Этот пакет SDK подключается к Хранилищу таблиц Azure и API таблиц Azure Cosmos DB.
  • Учетная запись хранения Azure или учетная запись Azure Cosmos DB.

Создание учетной записи службы Azure

You can work with tables using the Azure Table storage or the Azure Cosmos DB. To learn more about the differences between table offerings in these two services, see the Table offerings article. You'll need to create an account for the service you're going to use. The following sections show how to create both Azure Table storage and the Azure Cosmos DB account, however you can just use one of them.

Create an Azure Storage account (Создание учетной записи хранения Azure)

The easiest way to create an Azure storage account is by using the Azure portal. To learn more, see Create a storage account.

You can also create an Azure storage account by using Azure PowerShell or Azure CLI.

If you prefer not to create a storage account at this time, you can also use the Azure Storage Emulator to run and test your code in a local environment. For more information, see Use the Azure Storage Emulator for development and testing.

Создание учетной записи API таблиц Azure Cosmos DB

For instructions on creating an Azure Cosmos DB Table API account, see Create a database account.

Установка пакета SDK таблиц Azure Cosmos DB для Python.

После создания учетной записи хранения установите пакет SDK таблиц Azure Cosmos DB для Python. Дополнительные сведения см. в файле README.rst в репозитории GitHub на странице пакета SDK таблиц Cosmos DB для Python.

Импорт классов TableService и Entity

Для работы с сущностями в службе таблиц Azure с помощью Python необходимо использовать классы TableService и Entity. Добавьте следующий код в начало файла Python, чтобы импортировать модуль и класс:

from azure.cosmosdb.table.tableservice import TableService
from azure.cosmosdb.table.models import Entity

Подключение к службе таблиц Azure

Чтобы подключиться к службе таблиц в службе хранилища Azure, создайте объект TableService, а затем передайте имя и ключ учетной записи хранения. Замените myaccount и mykey именем учетной записи и ключом.

table_service = TableService(account_name='myaccount', account_key='mykey')

Подключение к Azure Cosmos DB

Чтобы подключиться к Azure Cosmos DB, скопируйте первичную строку подключения c портала Azure и с ее помощью создайте объект TableService.

table_service = TableService(connection_string='DefaultEndpointsProtocol=https;AccountName=myaccount;AccountKey=mykey;TableEndpoint=myendpoint;')

Создание таблицы

Вызовите метод create_table, чтобы создать таблицу.

table_service.create_table('tasktable')

Добавление сущности в таблицу

Чтобы добавить сущность, сначала создайте объект, который представляет ее, затем передайте объект в метод TableService.insert_entity. Объект сущности может быть словарем или объектом типа Entity. Он определяет имена и значения свойств сущности. Каждая сущность должна включать требуемые свойства PartitionKey и RowKey помимо других свойств, определенных для сущности.

В этом примере создается объект словаря, который представляет сущность, а затем передает его в метод insert_entity, чтобы добавить его в таблицу:

task = {'PartitionKey': 'tasksSeattle', 'RowKey': '001',
        'description': 'Take out the trash', 'priority': 200}
table_service.insert_entity('tasktable', task)

В этом примере создается объект Entity, который затем передается в метод insert_entity для добавления в таблицу:

task = Entity()
task.PartitionKey = 'tasksSeattle'
task.RowKey = '002'
task.description = 'Wash the car'
task.priority = 100
table_service.insert_entity('tasktable', task)

PartitionKey и RowKey

Для каждой сущности необходимо указать свойства PartitionKey и RowKey. Это уникальные идентификаторы сущностей, так как вместе они формируют первичный ключ сущности. С помощью этих значений можно отправлять запросы быстрее, чем к другим свойствам, так как индексируются только эти свойства.

Служба таблиц использует PartitionKey для интеллектуального распределения сущностей таблицы по узлам хранилища. Сущности с одним значением PartitionKey хранятся на одном узле. RowKey — это уникальный идентификатор сущности в разделе, которому она принадлежит.

Обновление сущности

Чтобы обновить все значения свойств сущности, вызовите метод update_entity. Этот пример показывает, как заменить сущность обновленной версией:

task = {'PartitionKey': 'tasksSeattle', 'RowKey': '001',
        'description': 'Take out the garbage', 'priority': 250}
table_service.update_entity('tasktable', task)

Если обновляемая сущность больше не существует, операция обновления завершается ошибкой. Чтобы сохранить сущность независимо от того, существует она или нет, используйте метод insert_or_replace_entity. В следующем примере первый вызов заменит существующую сущность. Второй вызов вставит новую сущность, так как в таблице нет сущности с указанными свойствами PartitionKey и RowKey.

# Replace the entity created earlier
task = {'PartitionKey': 'tasksSeattle', 'RowKey': '001',
        'description': 'Take out the garbage again', 'priority': 250}
table_service.insert_or_replace_entity('tasktable', task)

# Insert a new entity
task = {'PartitionKey': 'tasksSeattle', 'RowKey': '003',
        'description': 'Buy detergent', 'priority': 300}
table_service.insert_or_replace_entity('tasktable', task)

Совет

Метод update_entity заменяет все свойства и значения сущности. Его также можно использовать для удаления свойств из существующей сущности. Чтобы обновить сущность с помощью новых или измененных значений свойств без замены сущности используйте метод merge_entity.

Изменение нескольких сущностей

Для атомарной обработки запроса службой таблиц можно отправить сразу несколько операций в пакете. Сначала используйте класс TableBatch, чтобы добавить несколько операций в один пакет. Затем вызовите метод TableService.commit_batch, чтобы отправить операции в атомарной операции. Все сущности, которые должны быть изменены в пакете, должны находиться в одном разделе.

В этом примере показано добавление двух сущностей в пакете:

from azure.cosmosdb.table.tablebatch import TableBatch
batch = TableBatch()
task004 = {'PartitionKey': 'tasksSeattle', 'RowKey': '004',
           'description': 'Go grocery shopping', 'priority': 400}
task005 = {'PartitionKey': 'tasksSeattle', 'RowKey': '005',
           'description': 'Clean the bathroom', 'priority': 100}
batch.insert_entity(task004)
batch.insert_entity(task005)
table_service.commit_batch('tasktable', batch)

Для пакетов также можно использовать синтаксис диспетчера контекста:

task006 = {'PartitionKey': 'tasksSeattle', 'RowKey': '006',
           'description': 'Go grocery shopping', 'priority': 400}
task007 = {'PartitionKey': 'tasksSeattle', 'RowKey': '007',
           'description': 'Clean the bathroom', 'priority': 100}

with table_service.batch('tasktable') as batch:
    batch.insert_entity(task006)
    batch.insert_entity(task007)

Запрос сущности

Чтобы запросить сущность в таблице, передайте ее свойства PartitionKey и RowKey в метод TableService.get_entity.

task = table_service.get_entity('tasktable', 'tasksSeattle', '001')
print(task.description)
print(task.priority)

Запрос набора сущностей

Можно запросить набор сущностей, указав строку фильтра с помощью параметра filter. Этот пример находит все задачи в Сиэтле, используя фильтр PartitionKey:

tasks = table_service.query_entities(
    'tasktable', filter="PartitionKey eq 'tasksSeattle'")
for task in tasks:
    print(task.description)
    print(task.priority)

Запрос подмножества свойств сущности

Также можно ограничить свойства, возвращаемые для каждой сущности в запросе. Этот метод, который называется проекцией, снижает потребление пропускной способности и может повысить производительность запросов, особенно для больших сущностей и наборов результатов. Используйте параметр select и передайте имена свойств, которые необходимо вернуть клиенту.

Запрос в следующем коде возвращает только описания сущностей в таблице.

Примечание

Следующий фрагмент работает только для службы хранилища Azure. Он не поддерживается Эмулятором службы хранилища Azure.

tasks = table_service.query_entities(
    'tasktable', filter="PartitionKey eq 'tasksSeattle'", select='description')
for task in tasks:
    print(task.description)

Запрос сущности без использования ключей раздела или строки

Вы также можете запросить сущности в таблице, не используя ключи раздела или строки. Укажите метод table_service.query_entities без параметров filter и select, как показано в следующем примере:

print("Get the first item from the table")
tasks = table_service.query_entities(
    'tasktable')
lst = list(tasks)
print(lst[0])

Удаление сущности

Чтобы удалить сущность, передайте ее свойства PartitionKey и RowKey в метод delete_entity.

table_service.delete_entity('tasktable', 'tasksSeattle', '001')

Удаление таблицы

Если вам больше не нужна таблица или сущность в ней, вызовите метод delete_table, чтобы окончательно удалить таблицу из службы хранилища Azure.

table_service.delete_table('tasktable')