执行 PUTITEM 类型时出错:<类"str">,有效类型:<类"字典>



当对dynamo执行putitem时,它会给我以下错误,即我正在从s3读取的json。这是代码

dictItems = json.load(object_summary.get()['Body'])
item2 =  {
"ruc" : dictItems['ruc'],
"dni" :dictItems['dni'],
"number_operation" :dictItems['number_operation'],
"name" :dictItems['name'],
"address" :dictItems['address'],
"validation_date" :dictItems['validation_date'],
"directory" :dictItems['directory'],
"addresses" :dictItems['addresses'],
"representatives"  :dictItems['representatives'],
"sunat"  :dictItems['sunat'],
"debt"  :dictItems['debt'],
"bad_debtor_portfolio" :dictItems['bad_debtor_portfolio'],
"foreign_trade" :dictItems['foreign_trade'],
"legal_information" :dictItems['legal_information'],
"query_indicator" :dictItems['query_indicator'],
"claim_review": dictItems['claim_review']
}
dynamodb = boto3.client('dynamodb')
dynamodb.put_item(TableName='temporal', Item=item2)

这是错误

参数验证失败:参数Item.ruc的类型无效,值:789456123,类型:<类"str">,有效类型:<类"dict">参数Item.dni的类型无效,值:,类型:<类"str">,有效类型:<类"dict">参数的类型无效Item.number_operation,值:XXXXXXXXXX,类型:<类"str">,有效类型:<类"dict">参数Item.name的类型无效,value:这是一个字符串,类型:<类"str">,有效类型:<类"dict">

如DynamoDB文档中详细说明的,DynamoDB的低级API基于JSON,由于JSON数据类型与DynamoDB类型不完全对应,因此不同类型的表示更加复杂。例如,要发送您想作为请求的一部分发送的号码789456123,您不能简单地发送这个号码,而是需要发送以下对象:{ "N": "789456123"}。这是一个映射,键是类型("N"表示一个数字(,值是这个数字的内容——一个JSON字符串,而不是JSON数字,以免JSON库处理它时失去精度(。

boto3的";客户端";您正在使用的库使用这个低级API,所以您必须传递{ "N": "789456123"}而不是789456123

但有一种更好更简单的方法:boto3也有一个";资源";库,它为您提供了或多或少相同的函数,但它们的参数是普通的Python类型,而不是低级的API对象。所以你可以正常地传递一个Python整数,它将作为"传递给API;数字";对象,而无需显式执行此转换。当你阅读表格时,你也可以享受相反的转换。

您应该将代码切换为使用";资源";而不是";客户";。

由于指定了错误,输入数据类型必须是字典而不是字符串。

改为:

dictItems = json.load(object_summary.get()['Body'])
item2 =  {
"ruc" : {'N': dictItems['ruc']},
...
}
dynamodb = boto3.client('dynamodb')
dynamodb.put_item(TableName='temporal', Item=item2)

其中CCD_ 5改变为CCD_。

最新更新