gpt4 book ai didi

python - 将列表发送到 DynamoDB 时 ParameterVailidation 失败

转载 作者:行者123 更新时间:2023-11-28 21:03:04 25 4
gpt4 key购买 nike

我在 AWS Lambda 上有一个简单的 Python 函数,它只是将一些数据放入 DynamoDB 表中,据我所知,我遵循了 put_item() 函数的 Boto3 文档中的正确格式。我收到以下似乎无法调试的错误:

"errorMessage": 
"Parameter validation failed:\nInvalid type for parameter
Item.GSRResults.L[0], value: 3.8, type: <class 'float'>, valid types: <class 'dict'>
\nInvalid type for parameter Item.GSRResults.L[1], value: 3.4, type: <class 'float'>, valid types: <class 'dict'>\... snip...
\nInvalid type for parameter Item.GSRResults.L[9], value: 3.3, type: <class 'float'>, valid types: <class 'dict'>",
"errorType": "ParamValidationError",
"stackTrace": [
[
"/var/task/index.py",
39,
"upload_test",
"Item=item"
],

这是 Python 函数:

def upload_test(event, context):
if event['httpMethod'] == 'POST':
info = event['body']
item = info['Item']
return respond(None, dynamo.put_item(
TableName="TestResults",
Item=item))

这是我要发送的 JSON:

{
"body": {
"Item": {
"UID": {
"S": "U999999"
},
"PID": {
"S": "P444444"
},
"GSRResults": { "L": [3.8,3.4,3.3,2.8,1.3,3.2,4.3,2.1,3.2,3.3] }
}
},
"httpMethod": "POST"
}

最佳答案

使用以下 Client.put_item客户端 API 示例:

import boto3
client = boto3.client('dynamodb')

item1 = {
"id": {
"S": "1",
},
"name": {
"S": "Testing"
},
"age": {
"N": "22"
},
"grades": {
"L": [ {"N": "3.50"}, {"N": "3.1415926"} ]
}
}

client.put_item(TableName='test', Item=item1);

或使用以下 Table.put_item资源 API 示例:

import boto3
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('test')

item2 = {
"id": "2",
"name": "Testing2",
"age": 22,
"grades": [ decimal.Decimal('3.50'), decimal.Decimal('3.1415926') ]
}

table.put_item(Item=item2)

很容易发现您正在使用资源级对象(例如 Table )但不小心查看了客户端级 API 文档,因为不幸的是这些方法具有相同的名称(例如 put_item).

查看 related post关于何时使用 boto3 ClientResource .这里的主要区别在于资源 API 自动将数据编码/解码到本地 Python 数据类型,而客户端 API 则不会。

关于python - 将列表发送到 DynamoDB 时 ParameterVailidation 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47060379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com