Обработка ответа от DynamoDB - Python - PullRequest
0 голосов
/ 16 апреля 2020

Я получаю следующие данные от DynamoDB в ответ на вызов API сканирования клиента.

Data = [{'id': {'S': '5'},
         'FirstName': {'S': 'Prashanth'},
         'LastName': {'S': 'Wadeyar'},
         'ClientName': {'S': 'Test'}}]

Я хочу обработать этот ответ и получить вывод как

{'FirstName':'Prashanth', 'LastName': 'Wadeyar', 'ClientName': 'Test'}

I может обработать это, отделяя это как

for field_obj in data:
    obj = (field_obj['FirstName'])

, но чтобы получить значение Firstname, ключ 'S' может отличаться для каждого объекта. например, булева строка, список et c.

- это простой способ получить пары ключ и значение.

Ответы [ 3 ]

1 голос
/ 16 апреля 2020

Если вы не хотите выводить внешние зависимости, вы можете использовать класс Table, как описано здесь .

import boto3

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('users')

response = table.get_item(
    Key={
        'username': 'janedoe',
        'last_name': 'Doe'
    }
)
item = response['Item']
print(item)

Ожидаемый результат:

{u'username': u'janedoe',
 u'first_name': u'Jane',
 u'last_name': u'Doe',
 u'account_type': u'standard_user',
 u'age': Decimal('25')}

Но каждый раз, когда я слышу о Python и DynamoDB, я предпочитаю использовать PynamoDB: https://pynamodb.readthedocs.io/en/latest/, который является своего рода ORM для DynamoDB.

0 голосов
/ 16 апреля 2020

Вышеуказанный ответ от Mayank, кажется, работает хорошо, но я также хотел отобразить поля, которые хочу вернуть в список. Следовательно, я отобразил поле и смог получить результат, который искал

FIELD_MAP = ['firstName', 'lastName',
               'clientName']

    for field_obj in response['Items']:
        for key in FIELD_MAP:
            if field_obj.get(key):
                obj = (field_obj.get(key))
                for i in obj:
                    value = obj[i]
                db_result.append({key: value})
    print(db_result)
0 голосов
/ 16 апреля 2020

Примерно так может работать, когда вам не нужно заботиться о внутренних ключах (S в вашем случае):

In [1018]: d = {}

In [1016]: for i in Data: 
      ...:     for k,v in i.items():
      ...:         if k != 'id':
      ...:             if isinstance(v, dict): 
      ...:                 for j, val in v.items(): 
      ...:                     d[k] = val 
      ...:                  

In [1024]: d                                                                                                                                                                                                
Out[1024]: {'FirstName': 'Prashanth', 'LastName': 'Wadeyar', 'ClientName': 'Test'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...