DynamoDB:更新原子计数器,并在新项目

时间:2016-02-12 01:33:22

标签: python amazon-web-services amazon-dynamodb

我的数据库只有一个哈希键和两个数值:countersome_value

我想更新原子计数器counter。我知道boto / DyamoDb会照顾我创建的元素,如果数据库中尚未存在的话。

由于我正在创建元素,因此我想使用相同的写操作将some_value放入db中。是否有可能在这方面修改update_item代码?

table.update_item(
            Key={
                'my_key': some_string
            },
            UpdateExpression="SET counter = if_not_exists(counter , :start) + :inc",
            ExpressionAttributeValues={
                ':inc': 1,
                ':start' : 0
            },
            ReturnValues="UPDATED_NEW"
        )

1 个答案:

答案 0 :(得分:0)

,您还可以与计数器一起更新 some_item 。实际上,您可以更新多个项目。以下是用于更新多个值的久经考验的代码。

    table.update_item(
    Key={
        'my_key': some_string
    },
    UpdateExpression="SET #counter = if_not_exists(#counter, :start) + :inc, #some_value = if_not_exists(#some_value, :start) - :inc",
    ExpressionAttributeNames={'#counter': 'counter', '#some_value': 'some_value'},
    ExpressionAttributeValues={
        ':inc': 1,
        ':start': 0
    },
    ReturnValues="UPDATED_NEW"
)

PS:始终定义expression attribute names,而不是直接在表达式中使用它,以避免冲突和随后的错误。