[英]How to update list of dictionary in dynamodb using boto3 with Conditional check
我有dynamodb
groupId
是分区键empdetails
是列表dataDetails
是我需要更新的属性名称当且仅当'empId': 1001
不在dataDetails中时,我才需要更新新词典的dataDetails列表
代码如下
new_obj = {'groupId':101, 'empId': 1001, 'empName': 'Joe'}
在我的 dataDetails 列表中[{'empId': 1002, 'empName': 'Fra'}]
已经存在
所以当前的 dataDetails 列表是 [ {'empId': 1002, 'empName': 'Fra'}, {'empId': 1001, 'empName': 'Joe'}]
dynamodb_resource = boto3.resource('dynamodb')
table = dynamodb_resource.Table('myTable')
groupId = new_object['groupId']
data_details = {"empId": new_object['empId'],
"empName": new_object['empName']}
result = table.update_item(
Key={
'groupId': groupId ,
},
UpdateExpression=
'SET dataDetails = list_append(if_not_exists(dataDetails, :empty_list), :data_details)',
ExpressionAttributeValues={
':data_details': [data_details], ':empty_list': []
},
ReturnValues="UPDATED_NEW"
)
我收到错误“errorMessage”:“调用 UpdateItem 操作时发生错误(ValidationException):无效的 UpdateExpression:未定义表达式中使用的表达式属性值;属性值::empty_list”,
经过大量试验,我得到了解决方案 [data_details],它应该在列表中。 在上面的代码中更新以供参考
如果'empId': 1001
已经在dataDetails中,我可以做任何条件检查,以便它不应该附加到字典中吗?
您看到的解决方案有很多错误,但让我们按照规则在每个问题上使用 1 个关于 stackoverflow 的问题。 当前的异常是因为你正在使用一个你没有声明的变量,你可以这样声明它:
dynamodb_resource = boto3.resource('dynamodb')
table = dynamodb_resource.Table('myTable')
groupId = new_object['groupId']
data_details = {"empId": new_object['empId'],
"empName": new_object['empName']}
result = table.update_item(
Key={
'groupId': groupId ,
},
UpdateExpression=
'SET dataDetails = list_append(if_not_exists(dataDetails, :empty_list), :data_details)',
ExpressionAttributeValues={
':data_details': [data_details],
':empty_list': []
},
ReturnValues="UPDATED_NEW"
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.