DynamoDB插入(put)项目 - 返回创建的项目?

3

在我的Python脚本中,我向DynamoDB表中插入记录(数据项),但我意识到AWS的响应并不包括实际插入的数据项:

{'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()

我宁愿不进行另一次往返以获取刚插入的用户对象。当然,我可以模拟该对象,因为在Python中使用boto3时,user对象只是类似字典的东西,但是使用单一表示方式非常方便。此外,put_item调用似乎也这样做了。
r = user_table.put_item(Item={'user_id': uid, 'info' : { ... }})

应该能够返回已放置的物品吗?还是其他端点可以?

感谢任何见解!

1个回答

6
你需要在put_item请求中设置属性ReturnValues='ALL_NEW',以便在响应中获取该项。 如此处所述。 编辑:文档有误,put_item不接受ALL_NEW。由于你已经将精确的项作为参数传递给put_item,因此你真的不需要它被返回。

我有些困惑,文档明确说明:“ReturnValues参数被几个DynamoDB操作使用;但是,PutItem除了NONE或ALL_OLD之外不识别任何值。”。我理解你的意思是PutItem接受“ALL_NEW”。那么这些文档是否已经过时了呢? - gdvalderrama
实际上,我在这个问题上发现了一个开放问题。看起来'ALL_NEW'并不适用于put_item,或者我漏掉了什么? - gdvalderrama

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接