![](/img/trans.png)
[英]Error when doing a PUTITEM type: <class 'str'>, valid types: <class 'dict'>
[英]How to convert Class<str> to Class<dict>
我需要在 DynamoDB 中上传一些项目。 我正在使用boto3
资源。 我需要插入的项目是几个JSON
串在一起。 我需要将它们转换为dict
,以便将它们插入 DynamoDB。
def update_record_Dynamo(
company_name,
first_name,
last_name,
email,
status,
phone):
table_name = "cpe-uat-ddb-cem-newpro"
table = boto3.resource("dynamodb").Table(table_name)
response = table.get_item(Key={'company': company_name})
existing_user = response['Item']['users']
# user looks like this =
'''
{
"first_name": "bala",
"last_name": "Reaburn",
"email": "b1010gmail.com",
"phone": "9053258111",
"status": "administrator"
}
'''
flag = {
"first_name": first_name,
"last_name": last_name,
"email": email,
"phone": phone,
"status": status
}
flag_dict = json.dumps([existing_user, flag])
# new_users = jam+flag
# new_users = json.loads(flag_dict)
flag_dict = json.dumps(flag_dict)
flag_dict = json.loads(flag_dict)
final = json.dumps(eval(str(flag_dict)))
print(type(final))
update_record_response = table.update_item(
Key={'company': company_name},
AttributeUpdates={
'users': final,
},
)
return update_record_response
这是我得到的错误:
botocore.exceptions.ParamValidationError: Parameter validation failed:
Invalid type for parameter AttributeUpdates.users, value: [
{
"last_name": "",
"first_name": "",
"email": "",
"status": ""
}
,
{
"first_name": "bala",
"last_name": "Reaburn",
"email": "b1010gmail.com",
"phone": "9053258688",
"status": "administrator"
}
], type: <class 'str'>, valid types: <class 'dict'>
Invalid type for parameter AttributeUpdates.users, value: [{"last_name": "", "first_name": "", "email": "", "status": ""}, {"first_name": "bala", "last_name": "Reaburn", "email": "b1010gmail.com", "phone": "9053258688", "status": "administrator"}], type: <class 'str'>, valid types: <class 'dict'>
看起来您正在将其上传为字典列表,而不是字典本身。
flag_dict = json.dumps([existing_user, flag])
创建列表,您可以在返回的错误中看到它仍然有括号。 如果你想要那种风格,你会想要将它重新创建为字典的字典。
编辑:要重写上面的行,请尝试
flag_dict = {
'existing_user': existing_user,
'flag': flag
}
编辑 2:
flag = {"first_name":first_name, "last_name":last_name, "email":email,"phone":phone, "status":status}
final = {
'existing_user': existing_user,
'flag': flag
}
update_record_response = table.update_item(
Key={'company': company_name},
AttributeUpdates={
'users': final,
},
)
return update_record_response
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.