![](/img/trans.png)
[英]Invalid UpdateExpression: Attribute name is a reserved keyword; reserved keyword: value
[英]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
需要一个字符串,而您正在传递一个列表:
我还建议您只打印值并检查它们是否与您传递的参数所期望的正确语法相匹配。
对于嵌套值,您只需遵循相同的概念:
#customer.#value
如果您共享您尝试过的查询表达式,对我来说会更容易,但如果是保留字,您需要重命名查询中的字段:
table.update_item(
Key={
'_id': 7
},
UpdateExpression="set #val = :v",
ExpressionAttributeValues={
":v": "false",
},
ExpressionAttributeNames={
"#val": "value"
}
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.