[英]How to update attributes in map DynamoDB
我想更新 #info 中的屬性 #name 但有時 #info 不存在
table.update_item(
Key={
'id': '001'
},
UpdateExpression='SET #k = if_not_exists(#k, :i), #k.#ks = :kv',
ExpressionAttributeNames={
'#k': 'info',
'#ks': 'name'
},
ExpressionAttributeValues={
':i': {},
':kv': 'new_name'
}
)
調用 UpdateItem 操作時發生錯誤(ValidationException):Invalid UpdateExpression:兩個文檔路徑相互重疊; 必須刪除或重寫這些路徑之一; 路徑一:[信息],路徑二:[信息,名稱]
我想檢查 #info 是否存在。 如果沒有,創建一個新的#info,如果有,更新#name。
很快:嘗試更新該字段,假設它存在,如果失敗,請檢查是否由於您嘗試更新的字段不存在而導致驗證異常,並從根級別創建它。
否則,在條目創建時將info
字段設置為空字典。
def udpateItemName(id, val):
try:
table.update_item(
Key={
'id': id
},
UpdateExpression='SET #k.#ks = :kv',
ExpressionAttributeNames={
'#k': 'info',
'#ks': 'name',
},
ExpressionAttributeValues={
':kv': val
}
)
}
except botocore.exceptions.ClientError as ce:
if ce.response['Error']['Code'] != 'ValidationException':
# some further checks can be made on ['Error']['Message'] here to be sure
# that the error is due to non existing path
raise ce
table.update_item(
Key={
'id': id
},
UpdateExpression='SET #k = :kv',
ExpressionAttributeNames={
'#k': 'info'
},
ExpressionAttributeValues={
':kv': {"name": val}
}
)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.