Запрос сканирования БД Dynamo для получения выходного файла в формате JSON - PullRequest
0 голосов
/ 04 февраля 2020

Я новичок в БД Динамо, использующий boto3. Я хотел бы: получить сканирование всех строк в DB Dynamo и сохранить его в формате JSON, в файле, для дополнительной обработки данных.

В настоящее время я использую скрипт, показанный ниже, чтобы получить детали (будет разбито на страницы):

from __future__ import print_function # Python 2/3 compatibility
import boto3
import json
import decimal
from boto3.dynamodb.conditions import Key, Attr

# Helper class to convert a DynamoDB item to JSON.
class DecimalEncoder(json.JSONEncoder):
    def default(self, o):
        if isinstance(o, decimal.Decimal):
            if o % 1 > 0:
                return float(o)
            else:
                return int(o)
        return super(DecimalEncoder, self).default(o)

dynamodb = boto3.resource('dynamodb')

table = dynamodb.Table('Movies')

#fe = Key('year').between(1951, 1964)
pe = "#yr, title, info.rating"
# Expression Attribute Names for Projection Expression only.
ean = { "#yr": "year", }
esk = None


response = table.scan(
#    FilterExpression=fe,
    ProjectionExpression=pe,
    ExpressionAttributeNames=ean
    )

for i in response['Items']:
    print(json.dumps(i, cls=DecimalEncoder)) 

while 'LastEvaluatedKey' in response:
    response = table.scan(
        ProjectionExpression=pe,
#        FilterExpression=fe,
        ExpressionAttributeNames= ean,
        ExclusiveStartKey=response['LastEvaluatedKey']
        )

    for i in response['Items']:
        print(json.dumps(i, cls=DecimalEncoder),)

Это дает мне пример выходных данных из 5000 строк:

{"info": {"rating": 6.5}, "year": 2004, "title": "The Polar Express"}
{"info": {"rating": 5.7}, "year": 2004, "title": "The Prince & Me"}
{"info": {"rating": 5.3}, "year": 2004, "title": "The Princess Diaries 2: Royal Engagement"}
{"info": {"rating": 6.3}, "year": 2004, "title": "The Punisher"}
{"info": {"rating": 6.8}, "year": 2004, "title": "The SpongeBob SquarePants Movie"}

Я не могу получить вывод в нужном формате (как показано ниже) ). Я ожидаю файл здесь.

[
    {"info": {"rating": 6.5}, "year": 2004, "title": "The Polar Express"},
    {"info": {"rating": 5.7}, "year": 2004, "title": "The Prince & Me"},
    {"info": {"rating": 5.3}, "year": 2004, "title": "The Princess Diaries 2: Royal Engagement"},
    {"info": {"rating": 6.3}, "year": 2004, "title": "The Punisher"},
    {"info": {"rating": 6.8}, "year": 2004, "title": "The SpongeBob SquarePants Movie"}
]

Может ли кто-нибудь дать мне несколько советов или указаний о том, как провести дальнейшее расследование?

1 Ответ

0 голосов
/ 04 февраля 2020

Разве ответ ['Items'] не является тем списком, который вы ищете? Response - это словарь со списком внутри, он может быть только подмножеством, поэтому вам нужно при необходимости перебирать несколько ответов.

Ссылка: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#DynamoDB .Client.scan

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...