Кажется, что не могу заставить Dynamob.update_item Бото работать - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь использовать эту функцию Boto, но, похоже, не могу понять это правильно ... Есть идеи? Do c Ссылка

    tablename = 'name_table'
    response = dynamodb.update_item(
        TableName=tablename,
        Key={
            'name': 'Tony',
        },
        UpdateExpression="set name= :r",
        ExpressionAttributeValues={
            ':r': 'Ralph',
        },
        ReturnValues="UPDATED_NEW"
    )

Это ошибки, которые я получаю:

Invalid type for parameter Key.name, value: set(['Tony', 0]), type: <type 'set'>, valid types: <type 'dict'>

Я пытался изменить имя с str на dict, поэтому теперь я с этой ошибкой

ValueError: dictionary update sequence element #0 has length 1; 2 is required

Куда go отсюда? Большое спасибо ..

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Ключи в API, на который вы ссылались, ожидают, что значения будут атрибутами DynamoDB, поэтому Key должно быть таким:

{
    'name': {
        'S': 'Tony'
    }
}

Значение ExpressionAttributeValues должно быть таким:

{
    ':r': {
        'S': 'Ralph'
    }
}

Итак, все выглядит так:

    tablename = 'name_table'
    response = dynamodb.update_item(
        TableName=tablename,
        Key={
            'name': {
                'S': 'Tony'
             }
        },
        UpdateExpression="set name= :r",
        ExpressionAttributeValues={
            ':r': {
                'S': 'Ralph'
            }
        },
        ReturnValues="UPDATED_NEW"
    )
0 голосов
/ 17 февраля 2020

Ключ не может быть словарем.

     tablename = 'name_table'
     response = dynamodb.update_item(
        TableName=tablename,
        Key="name = :name",
        UpdateExpression="set name= :r",
        ExpressionAttributeValues={
            ':r': 'Ralph',
            ':name': 'Tony'
        },
        ReturnValues="UPDATED_NEW"
    )
...