В моем сценарии 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 предмет? Или может быть какая-то другая конечная точка?
Спасибо за понимание!
Я смущен тем, что в документах четко указано, что «Параметр ReturnValues используется несколькими операциями DynamoDB, однако PutItem не распознает значения, отличные от NONE или ALL_OLD.». Я понимаю, вы говорите, что PutItem принимает «ALL_NEW». Неужели документы устарели? – guival
На самом деле, я нашел [открытую проблему] (https://github.com/boto/boto3/issues/1150) об этом. Похоже, что «ALL_NEW» недействителен для put_item, или я что-то упускаю? – guival
@guival вы правы, я обновил свой ответ. –