代码之家  ›  专栏  ›  技术社区  ›  Nico Müller

Dynamodb在dict中添加或更新密钥

  •  0
  • Nico Müller  · 技术社区  · 5 年前

    我有一个dynamodb表,其结构如下:

    'Items': [
       {'user_id': 'myuser',
        'owes_to': {
             'youruser': '10',
             'user3': '20'
           }
       }]
    

    owes_to

    在两个调用中的示例中:

    1. 添加值为20的“user4”,它不存在,因此创建值为20的user4键)
    2. 下次将user4值20更新为40时,这个时间键已经存在,所以将20添加到现有值中
    0 回复  |  直到 5 年前
        1
  •  2
  •   FireNero    5 年前

    更新表达式可能类似于:

    update_request = {
        Key={'user_id': ':id'},
        UpdateExpression='SET owes_to.#user_name = if_not_exists(owes_to.#user_name, :default_val) + :val',
        ExpressionAttributeNames={
            '#user_name': <your_user_name>
        }
        ExpressionAttributeValues={
            ':id': 'myuser',
            ':val': <your_update_value>,
            ':default_val': 0
        }
    }
    

    注意 if_not_exists(owes_to.#user_name, :default_val) 建筑。如果用户的值存在,它将采用该值,或者采用中指定的值 :default_val 如果没有。 official docs