如何使用boto3手动将DynamoDB有线协议转换为本机Python对象?

Mas*_*son 9 python boto amazon-dynamodb boto3

我有一个由DynamoDB流触发的Lambda.Lambda进行一些处理,然后在SNS中的主题上创建通知.理想情况下,我希望将整个新文档包含在发送到SNS的通知中,以便下游客户端不必命中DynamoDB来获取数据.

我遇到的问题是来自DynamoDB流的数据是DynamoDB有线格式(地图包括数据类型作为键).当我向下游客户端发送通知时,我不希望他们必须了解DynamoDB有线格式来解析消息(例如,如果我切换到新的底层数据存储,我将不得不重新创建该格式).

显然boto3客户端能够将这种格式解析为Python对象,有没有办法让我自己访问解析器?据我所知,它被称为从DynamoDB获取数据的一部分,但我无法找到自己调用它的方法.

gar*_*aat 18

我有类似的情况,我使用以下方法:

from boto3.dynamodb.types import TypeDeserializer

deser = TypeDeserializer()

...
<in handler>
    for record in event['Records']:
        old = record['dynamodb'].get('OldImage')
        new = record['dynamodb'].get('NewImage')
        if old:
            d = {}
            for key in old:
                d[key] = deser.deserialize(old[key])
Run Code Online (Sandbox Code Playgroud)

这种方法对我有用.生成的字典d包含转换的对象,而不是传递给处理程序的有线格式版本.