我正在尝试更新DynamoDB表中的项目。我编写的代码正在更新项目,但是当我添加带有标题“源/目标”的列时,它给出了“ ValidationException”异常。
用于更新的代码-
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table("test")
response = table.update_item(
Key={
'id': "test_id
},
UpdateExpression="set source/target= :st, user_name= :usr",
ExpressionAttributeValues={
':st' : event['source/target'],
':usr' : event['user_name']
},
ReturnValues="UPDATED_NEW"
)
我得到的错误是-
调用UpdateItem操作时发生错误(ValidationException):无效的UpdateExpression:语法错误;令牌:\“ / \”,附近:\“源/目标\”“
如何解决这个问题?
答案 0 :(得分:2)
由于您在属性名称中使用了特殊字符,因此我认为您需要指定一个ExpressionAttributeNames
。
我不知道确切的语法,但是应该是这样的:
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table("test")
response = table.update_item(
Key={
'id': "test_id
},
UpdateExpression="set #src = :st, user_name = :usr",
ExpressionAttributeValues={
':st' : event['source/target'],
':usr' : event['user_name']
},
ExpressionAttributeNames={
'#src' : 'source/target'
},
ReturnValues="UPDATED_NEW"
)
答案 1 :(得分:2)
嗨,当您具有以下特殊字符时,必须使用ExpressionAttributeNames
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table("test")
response = table.update_item(
Key={
'id': "test_id
},
UpdateExpression="set #colName= :st, user_name= :usr",
ExpressionAttributeValues={
':st' : event['source/target'],
':usr' : event['user_name']
},
ExpressionAttributeNames={
'#colName' : 'source/target'
},
ReturnValues="UPDATED_NEW"
)