wek*_*ka1 4 python amazon-web-services amazon-dynamodb boto3
在我的DynamoDb表之一中,我有一个名为“状态”的列/键,事实证明这是一个保留关键字。不幸的是,不能删除整个表并重新启动它。如何重命名密钥?
这是导致异常的Lambda代码:
try :
response = table.query(
IndexName='myId-index',
KeyConditionExpression=Key('myId').eq(someId)
)
for item in response['Items']:
print('Updating Item: ' + item['id'])
table.update_item(
Key={
'id': item['id']
},
UpdateExpression='SET myFirstKey = :val1, mySecondKey = :val2, myThirdKey = :val3, myFourthKey = :val4, myFifthKey = :val5, status = :val6',
ExpressionAttributeValues={
':val1': someValue1,
':val2': someValue2,
':val3': someValue3,
':val4': someValue4,
':val5': someValue5,
':val6': someValue6
}
)
except Exception, e:
print ('ok error: %s' % e)
Run Code Online (Sandbox Code Playgroud)
这是例外:
2016-06-14 18:47:24 UTC + 2 ok错误:调用UpdateItem操作时发生错误(ValidationException):无效的UpdateExpression:属性名称是保留关键字;保留关键字:状态
小智 5
有一个简单的解决方案,而不是重新命名列:在查询中使用投影表达式和表达式属性名称。
我遇到了同样的问题(我的表包含“名称”列。这是一个示例查询:
TableName: 'xxxxxxxxxx',
ExpressionAttributeNames: {
'#A': 'country',
'#B': 'postcode',
'#C': 'name'
},
ExpressionAttributeValues: {
':a': {S: 'DE'},
':c': {S: 'Peter Benz'}
},
FilterExpression: 'country = :a AND #C = :c',
ProjectionExpression: '#A, #B, #C'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6267 次 |
| 最近记录: |