#python #amazon-web-services #aws-lambda #amazon-dynamodb
Вопрос:
Я пытаюсь добавить значение в запись таблицы DynamoDB:
{
"id": "1",
"history": [
"638380895-8"
],
"currentbooks": "",
"email": "ocomford0@craigslist.org",
"name": "Osborne Comford"
}
Я пытаюсь написать код для добавления строковой записи в массив «история».
Ниже приведен мой код на python:
usersTable = dynamodb.Table("users")
booksTable = dynamodb.Table("books")
bookisbn = event['isbn']
response = usersTable.update_item(
Key={
'id': userid,
},
UpdateExpression="set history=list_append(history, :s)",
ExpressionAttributeValues={
':s': bookisbn
},
ReturnValues="UPDATED_NEW"
)
Это приводит меня к ошибке:
"errorMessage": "An error occurred (ValidationException) when calling the UpdateItem operation: Invalid UpdateExpression: Incorrect operand type for operator or function; operator or function: list_append, operand type: S"
Ответ №1:
list_append
работает с 2 списками:
list_append(list1, list2)
Вам нужно передать выражение обновления вместе с типом добавляемого элемента, т. е. «L» для списка:
response = usersTable.update_item(
Key={
'id': userid,
},
UpdateExpression="set history=list_append(history, :isbn)",
ExpressionAttributeValues={
':isbn': {"L": [ { "S" : isbn } ]} # ensure you pass a list
},
ReturnValues="UPDATED_NEW"
)
См., например, документы.
Комментарии:
1. Обновленный. Пробовать снова.
2. Все еще выдает мне ошибку: «ErrorMessage»: «Произошла ошибка (исключение проверки) при вызове операции updateItem: Недопустимое выражение обновления: Неверный тип операнда для оператора или функции; оператор или функция: list_append, тип операнда: M»,
3. Забыл о типе для
isbn
себя. Обновленный.
Ответ №2:
response = usersTable.update_item(
Key={
'id': userid,
},
UpdateExpression="set history=list_append(history,:isbn)",
ExpressionAttributeValues={
':isbn': [bookisbn]
},
ReturnValues="UPDATED_NEW"
)
Это правильное решение…