dynamoDB中的更新项目

时间:2019-03-20 08:10:05

标签: python aws-lambda amazon-dynamodb validationexception

我正在尝试更新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:语法错误;令牌:\“ / \”,附近:\“源/目标\”“

如何解决这个问题?

2 个答案:

答案 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"
    )