繁体   English   中英

如何使用带有条件检查的boto3更新dynamodb中的字典列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM