Existe uma API Python para enviar solicitações de obtenção em lote ao AWS DynamoDB?

O pacoteboto3 - Wrapper oficial da Amazon para API AWS para python - oferece ótimo suporte para o upload de itens para o DynamoDB em massa. Se parece com isso:

db = boto3.resource("dynamodb", region_name = "my_region").Table("my_table")

with db.batch_writer() as batch:
    for item in my_items:
        batch.put_item(Item = item)

Aquimy_items é uma lista de dicionários Python, cada um dos quais deve ter a (s) chave (s) primária (s) da tabela. A situação não é perfeita - por exemplo, não há mecanismo de segurança para impedir que você exceda seus limites de taxa de transferência - mas ainda é muito bom.

No entanto, não parece haver nenhuma contrapartida para a leitura do banco de dados. O mais próximo que posso encontrar éDynamoDB.Client.batch_get_item(), mas aqui a API é extremamente complicada. Veja como é a solicitação de dois itens:

db_client = boto3.client("dynamodb", "my_region")

db_client.batch_get_item(
    RequestItems = {
        "my_table": {
            "Keys": [
                {"my_primary_key": {"S": "my_key1"}},
                {"my_primary_key": {"S": "my_key2"}}
            ]
        }
    }
)

Isso pode ser tolerável, mas a resposta tem o mesmo problema: todos os valores são dicionários cujas chaves são tipos de dados ("S" para corda,"N" para número,"M" para mapeamento etc.) e é mais do que um pouco chato ter que analisar tudo. Então, minhas perguntas são:

Existe algum nativoboto3 suporte para leitura em lote do DynamoDb, semelhante aobatch_writer função acima?

Falhando naquilo,

Fazboto3 fornecer qualquer maneira integrada de desserializar automaticamente as respostas aoDynamoDB.Client.batch_get_item() função?

Também vou adicionar que a funçãoboto3.resource("dynamodb").Table().get_item() tem o que eu consideraria a API "correta", pois nenhuma análise de tipo é necessária para entradas ou saídas. Portanto, parece que isso é algum tipo de supervisão dos desenvolvedores, e suponho que estou procurando uma solução alternativa.

questionAnswers(3)

yourAnswerToTheQuestion