如何修复错误:使用lambda python在dynamodb中输入项

如何修复错误:使用lambda python在dynamodb中输入项,python,amazon-web-services,aws-lambda,amazon-dynamodb,Python,Amazon Web Services,Aws Lambda,Amazon Dynamodb,我在使用lambda和dynamodb时遇到一些问题 这是我的python代码: import json import boto3 def lambda_handler(event, context): client = boto3.client('dynamodb', region_name='ap-northeast-2') dynamodb = boto3.resource('dynamodb', region_name='ap-northeast-2') re

我在使用lambda和dynamodb时遇到一些问题

这是我的python代码:

import json
import boto3

def lambda_handler(event, context):
    client = boto3.client('dynamodb', region_name='ap-northeast-2')
    dynamodb = boto3.resource('dynamodb', region_name='ap-northeast-2')

    response = client.put_item(
        TableName='tablename',
        Item = {
            'key1': 'value1',
            'key2': 'value2',
            'key3': 'value3',
            'key4': 'value4'
                }
        )
这是错误日志:

{
  "errorMessage": "Parameter validation failed:\nInvalid type for parameter Item.key1, value: value1, type: <class 'int'>, valid types: <class 'dict'>\nInvalid type for parameter Item.key2, value: value2, type: <class 'str'>, valid types: <class 'dict'>\nInvalid type for parameter Item.key3, value: value3, type: <class 'str'>, valid types: <class 'dict'>\nInvalid type for parameter Item.key4, value: value4, type: <class 'int'>, valid types: <class 'dict'>",
  "errorType": "ParamValidationError",
  "stackTrace": [
    "  File \"/var/task/lambda_function.py\", line 8, in lambda_handler\n    response = client.put_item(\n",
    "  File \"/var/runtime/botocore/client.py\", line 316, in _api_call\n    return self._make_api_call(operation_name, kwargs)\n",
    "  File \"/var/runtime/botocore/client.py\", line 598, in _make_api_call\n    request_dict = self._convert_to_request_dict(\n",
    "  File \"/var/runtime/botocore/client.py\", line 646, in _convert_to_request_dict\n    request_dict = self._serializer.serialize_to_request(\n",
    "  File \"/var/runtime/botocore/validate.py\", line 297, in serialize_to_request\n    raise ParamValidationError(report=report.generate_report())\n"
  ]
}
{
errorMessage:“参数验证失败:\n参数项的类型无效。key1,值:value1,类型:,有效类型:\n参数项的类型无效。key2,值:value2,类型:,有效类型:\n参数项的类型无效。key3,值:value3,类型:,有效类型:\n参数项的类型无效。key4,值:value4,类型:,有效类型:”,
“errorType”:“ParamValidationError”,
“stackTrace”:[
“文件\”/var/task/lambda_function.py\”,第8行,lambda_处理程序\n response=client.put_项(\n),
“File\”/var/runtime/botocore/client.py\”,第316行,在\u api\u调用中\n返回self.\u make\u api\u调用(操作名称,kwargs)\n”,
“File\”/var/runtime/botocore/client.py\”,第598行,在“make\u api\u call\n request\u dict=self.将\u转换为\u request\u dict(\n“,
“File\”/var/runtime/botocore/client.py\”,第646行,在“转换为请求”命令“请求”命令“\u dict=self.\u serializer.serialize命令“转换为请求”(\n“,
“文件\“/var/runtime/botocore/validate.py\”,第297行,在serialize_to_请求中\n raise ParamValidationError(report=report.generate_report())\n”
]
}

我搜索了有关参数验证失败错误的信息,aws说我必须下载或升级pip3和aws CLI,我也这么做了。但它仍然出错。

您的语法似乎不正确。请参阅中的示例

response=client.put\u项目(
项目={
“专辑名称”:{
‘S’:‘有点出名’,
},
“艺术家”:{
‘S’:‘你不认识任何人’,
},
“歌曲名称”:{
‘S’:‘今天给我打电话’,
},
},
ReturnConsumedCapacity='TOTAL',
TableName='Music',
)

值不是字符串,而是
AttributeValue
type

的实例。您的语法似乎不正确。请参阅中的示例

response=client.put\u项目(
项目={
“专辑名称”:{
‘S’:‘有点出名’,
},
“艺术家”:{
‘S’:‘你不认识任何人’,
},
“歌曲名称”:{
‘S’:‘今天给我打电话’,
},
},
ReturnConsumedCapacity='TOTAL',
TableName='Music',
)

值不是字符串,而是
AttributeValue
type

的实例boto3 SDK提供了两个
put\u item()
方法,一个是,一个是。它们是不同的,特别是您提供项目属性的方式是不同的。您使用的是客户机级别的API,但传递属性就像使用资源级别的API一样

以下是如何使用资源级别API:

import boto3

def lambda_handler(event, context):
    dynamodb = boto3.resource('dynamodb', region_name='ap-northeast-2')
    table = dynamodb.table('tablename')

    response = table.put_item(
        Item = {
            'key1': 'value1',
            'key2': 'value2',
            'key3': 'value3',
            'key4': 'value4'
        }
    )

boto3 SDK提供了两个
put_item()
方法,一个是,另一个是。它们是不同的,特别是提供项属性的方式不同。您使用的是客户端级API,但传递属性的方式与使用资源级API的方式相同

以下是如何使用资源级别API:

import boto3

def lambda_handler(event, context):
    dynamodb = boto3.resource('dynamodb', region_name='ap-northeast-2')
    table = dynamodb.table('tablename')

    response = table.put_item(
        Item = {
            'key1': 'value1',
            'key2': 'value2',
            'key3': 'value3',
            'key4': 'value4'
        }
    )

非常感谢!我正忙着做其他事情,抱歉检查太晚。非常感谢!我正忙着做其他事情,抱歉检查太晚