Обновить элемент в DynamoDB - PullRequest
1 голос
/ 20 марта 2019

Я пытаюсь обновить элементы в таблице 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"
    )

Я получаю ошибку -

Произошла ошибка (ValidationException) при вызове операции UpdateItem: Неверное выражение UpdateExpression: синтаксическая ошибка;токен: \ "/ \", рядом: \ "источник / цель \" "

Как решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 20 марта 2019

Привет, вы должны использовать 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"
    ) 
2 голосов
/ 20 марта 2019

Поскольку вы использовали специальный символ в имени атрибута, я думаю, вам нужно будет указать 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"
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...