繁体   English   中英

更新 DynamoDB 中保留关键字的记录

[英]Update record in DynamoDB for reserved Keyword

在 DynamoDB 中为 record_id 7 映射的数据之后,我想用新值更新客户

"customer": {
            "value": "id2",
            "label": "Customer2"
        }

但是,dyanamoDB 不允许更新,因为“ValidationException: Invalid UpdateExpression: Attribute name is a reserved keyword; reserved keyword: value”。

在 DynamoDB 中记录:

{
    "terms": "Terms",
    "action": {
        "value": "id1",
        "label": "In Progress"
    },
    "line_items": [{
        "product": "dd",
        "quantity": "10",
    }],
    "_id": "7",
    "customer": {
        "value": "id1",
        "label": "Customer1"
    }
}


   updateExpression = "set "
   updateValues = dict()
   expression_attributes_names = {}

   for key, value in dictData.items():  
     key1 =  key.replace('.', '.#')
     updateExpression +=" #{key1} = :{key},"
     updateValues[f":{key}"] = value
     expression_attributes_names[f"#{key1}"] = key

   table.update_item(
   Key={
    'id': item_id
   },
   UpdateExpression=updateExpression,
   ExpressionAttributeValues=updateValues
   ExpressionAttributeNames=expression_attributes_names
   )

UpdateExpression需要一个字符串,而您正在传递一个列表:

https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html#DDB-UpdateItem-request-UpdateExpression

我还建议您只打印值并检查它们是否与您传递的参数所期望的正确语法相匹配。

对于嵌套值,您只需遵循相同的概念:

#customer.#value

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ExpressionAttributeNames.html#Expressions.ExpressionAttributeNames.NestedAttributes

如果您共享您尝试过的查询表达式,对我来说会更容易,但如果是保留字,您需要重命名查询中的字段:

table.update_item(
    Key={
        '_id': 7
    },
    UpdateExpression="set #val = :v",
    ExpressionAttributeValues={
        ":v": "false",
    },
    ExpressionAttributeNames={
      "#val": "value"
    }
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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