Как получить чистый результат из DynamoDB? - PullRequest
2 голосов
/ 12 февраля 2020

Я использую DynamoDB, и когда я использую функцию boto3.get_item(), она возвращает мне такой запрос:

{'last_updated': {'S': '2020-02-11 21:48:05'},
 'id_': {'S': 'ID_DA_SURVEY'},
 'deleted': {'BOOL': False},
 'created': {'S': '2020-02-11 21:48:05'},
 'activated': {'BOOL': False},
 'step': {'S': 'editor'},
 'owner': {'N': '12'},
 'built': {'BOOL': False},
 'name': {'S': 'Survey UM'},
 'up_lime': {'BOOL': False},
 'lang': {'S': 'pt'},
 'teste': {'M': {'test': {'M': {'test2': {'N': '54'}}}}}
}

Есть способ, которым я могу получить свой Dict следующим образом:

{'last_updated': '2020-02-11 21:48:05',
 'id_': 'ID_DA_SURVEY',
 'deleted': False,
 'created': '2020-02-11 21:48:05',
 'activated': False,
 'step': 'editor',
 'owner': '12',
 'built': False,
 'name': 'Survey UM',
 'up_lime': False,
 'lang': 'pt',
 'teste': {'test': {'test2': '54'}}
}

Мне просто нужно избавиться от Типа Атрибута. Кто-нибудь может мне помочь?

1 Ответ

2 голосов
/ 12 февраля 2020

Вы можете использовать boto3 класс с именем TypeDeserializer из dynamodb types package.

Вот пример:

import pprint
from boto3.dynamodb.types import TypeDeserializer

item = {
    'last_updated': {
        'S': '2020-02-11 21:48:05'
    },
    'id_': {
        'S': 'ID_DA_SURVEY'
    },
    'deleted': {
        'BOOL': False
    },
    'created': {
        'S': '2020-02-11 21:48:05'
    },
    'activated': {
        'BOOL': False
    },
    'step': {
        'S': 'editor'
    },
    'owner': {
        'N': '12'
    },
    'built': {
        'BOOL': False
    },
    'name': {
        'S': 'Survey UM'
    },
    'up_lime': {
        'BOOL': False
    },
    'lang': {
        'S': 'pt'
    },
    'teste': {
        'M': {
            'test': {
                'M': {
                    'test2': {
                        'N': '54'
                    }
                }
            }
        }
    }
}

type_deserializer = TypeDeserializer()

py_data = {k: type_deserializer.deserialize(v) for k,v in item.items()}

pprint.pprint(py_data)

Вывод:

{'activated': False,
 'built': False,
 'created': '2020-02-11 21:48:05',
 'deleted': False,
 'id_': 'ID_DA_SURVEY',
 'lang': 'pt',
 'last_updated': '2020-02-11 21:48:05',
 'name': 'Survey UM',
 'owner': Decimal('12'),
 'step': 'editor',
 'teste': {'test': {'test2': Decimal('54')}},
 'up_lime': False}
...