Как запустить пакетный запрос к DynamoDB с boto3, учитывая список первичных ключей - PullRequest
0 голосов
/ 17 октября 2019

Учитывая список элементов переменной длины в Python, содержащих первичные ключи (например, itemList = ["item1","item2","item3"]), как я могу использовать boto3 для перевода этого списка в правильный формат для пакетного запроса динамодаба?

Ясмог успешно выполнить запрос путем ручного форматирования запроса, но моя проблема заключается в том, как элегантно перевести список Python в этот формат. Я попробовал функцию сериализатора в boto3, которая кажется правильным направлением, но мне не хватает какой-то части головоломки.

import boto3

dynamodb = boto3.resource('dynamodb', region_name='us-west-2')

response = dynamodb.batch_get_item(
    RequestItems={
        "dynamodb-table-name": {
            "Keys": [
                {
                    'pk': {
                        'S': 'item1'
                    },
                    'sk': {
                        'S': 'ITEM'
                    }
                },
                {
                    'pk': {
                        'S': 'item2'
                    },
                    'sk': {
                        'S': 'ITEM'
                    }
                }
            ]
        }
    }
)

Если я создаю сериализатор serializer = boto3.dynamodb.types.TypeSerializer() и использую его в своем спискеЯ вернулся с {'L': [{'S': 'item1'}, {'S': 'item2'}]}

1 Ответ

0 голосов
/ 18 октября 2019

Думаю, я понял свой вопрос. Первая проблема заключается в том, что между boto3.resource('dynamodb') и boto3.client('dynamodb') есть разница, и .client - это то, что мне удалось получить. Для другой части, хотя сериализация может быть жизнеспособным вариантом для изучения, я сделал следующее:

itemList = []
for item in items:
    itemList.append({'pk':{'S':item},'sk': {'S':'ITEM'}})

response = client.batch_get_item(
    RequestItems={
        "dynamodb-table-name": {
            "Keys": itemList
        }
    }
)
...