2017-01-27 3 views
3

В моем сценарии Python я вставить запись (элемент) в DynamoDB таблицу, но я понял, что ответ от AWS не включает в себя фактический элемент, вставленный:DynamoDB insert (put) item - вернуть элемент, созданный?

{'ResponseMetadata': {'HTTPHeaders': {'connection': 'keep-alive', 
    'content-length': '2', 
    'content-type': 'application/x-amz-json-1.0', 
    'date': 'Fri, 27 Jan 2017 23:31:22 GMT', 
    'server': 'Server', 
    'x-amz-crc32': '234324243', 
    'x-amzn-requestid': 'xxxxxxxxxx'}, 
    'HTTPStatusCode': 200, 
    'RequestId': 'xxxxxxxxxx', 
    'RetryAttempts': 0}} 

Это неудачно, поскольку у меня есть логика, как:

if not user.exists(): 
    user = create_user() 
else: 
    user = get_user() 

user.do_something() 

, и я бы предпочел не делать другого туда и обратно, чтобы получить объект пользователя, который я только что вставил.

Я могу, конечно, высмеять объект, так как с помощью boto3 в Python объект user - это просто словарно-подобная вещь, но приятно иметь возможность использовать только одно представление. Кроме того, похоже на put_item вызов

r = user_table.put_item(Item={'user_id': uid, 'info' : { ... }}) 

должны быть в состоянии вернуть put'd предмет? Или может быть какая-то другая конечная точка?

Спасибо за понимание!

ответ

3

Вам необходимо установить свойство ReturnValues='ALL_NEW' на свой запрос put_item, чтобы вернуть товар в ответ. Как документально here

Edit: документация неправильно, ALL_NEW не принимается для put_item. Поскольку у вас есть точный элемент в памяти в качестве параметра, который вы передали put_item, вам действительно не нужно его возвращать.

+0

Я смущен тем, что в документах четко указано, что «Параметр ReturnValues ​​используется несколькими операциями DynamoDB, однако PutItem не распознает значения, отличные от NONE или ALL_OLD.». Я понимаю, вы говорите, что PutItem принимает «ALL_NEW». Неужели документы устарели? – guival

+0

На самом деле, я нашел [открытую проблему] (https://github.com/boto/boto3/issues/1150) об этом. Похоже, что «ALL_NEW» недействителен для put_item, или я что-то упускаю? – guival

+0

@guival вы правы, я обновил свой ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^