1

我正在尝试更新 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): Invalid UpdateExpression: Syntax error; 令牌:\"/\",附近:\"源/目标\""

如何解决这个问题?

4

2 回答 2

4

嗨,当您有任何特殊字符时,您必须使用 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"
    ) 
于 2019-03-20T12:56:03.440 回答
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"
    )
于 2019-03-20T12:55:23.583 回答