Python Boto3 AWS Lambda类型反序列化程序错误:类型错误:不支持Dynamodb type<name>

2024-10-04 07:37:09 发布

您现在位置:Python中文网/ 问答频道 /正文

这是python lambda函数的相关部分:

def retrivearticle(id):
"""function that return a specific article"""
data = client.get_item(
    TableName=os.environ.get("STORAGE_GIODEMWEBSITE_NAME"),
    Key={
        'id': {
            'S': id
        }
    }
)
data = fromLowLevelToPython(data)
return data

其中从低层到高层是:

def fromLowLevelToPython(data):
    """Convert low-leve dynamodb response into regular json"""
    deserializer = TypeDeserializer()
    python_data = {k: deserializer.deserialize(v) for k, v in data.items()}
    return python_data

然后,我的dynamo DB表中有此项: enter image description hereenter image description here

    {
  "id": {
    "S": "test"
  },
  "value": {
    "S": "test"
  }
}

当我运行我的查询时,我得到了这个错误

    [ERROR] TypeError: Dynamodb type id is not supported
Traceback (most recent call last):
  File "/var/task/index.py", line 21, in handler
    response = retrivearticle(id)
  File "/var/task/index.py", line 54, in retrivearticle
    data = fromLowLevelToPython(data)
  File "/var/task/index.py", line 70, in fromLowLevelToPython
    python_data = {k: deserializer.deserialize(v) for k, v in data.items()}
  File "/var/task/index.py", line 70, in <dictcomp>
    python_data = {k: deserializer.deserialize(v) for k, v in data.items()}
  File "/var/task/boto3/dynamodb/types.py", line 269, in deserialize
    raise TypeError(

你知道这里有什么问题吗

如果我在本地尝试,它似乎可以正常工作:

In [13]: import boto3

In [14]: from boto3.dynamodb.types import TypeDeserializer

In [15]: ll = {
    ...:   "id": {
    ...:     "S": "test"
    ...:   },
    ...:   "value": {
    ...:     "S": "test"
    ...:   }
    ...: }

In [16]: def fromLowLevelToPython(data):
    ...:     """Convert low-leve dynamodb response into regular json"""
    ...:     deserializer = TypeDeserializer()
    ...:     python_data = {k: deserializer.deserialize(v) for k, v in data.items()}
    ...:     return python_data
    ...: 

In [17]: fromLowLevelToPython(ll)
Out[17]: {'id': 'test', 'value': 'test'}

Tags: inpytestidtaskdatareturnvar