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

lol*_*ter 4 python amazon-web-services amazon-dynamodb

在我的 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}}
Run Code Online (Sandbox Code Playgroud)

这很不幸,因为我的逻辑如下:

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

user.do_something()
Run Code Online (Sandbox Code Playgroud)

我不想再做一次往返只是为了获取我刚刚插入的用户对象。

当然,我可以模拟该对象,因为boto3在 Python 中使用该user对象只是一个类似字典的东西,但能够仅使用单个表示形式是很好的。似乎也有put_item电话

r = user_table.put_item(Item={'user_id': uid, 'info' : { ... }})
Run Code Online (Sandbox Code Playgroud)

应该能够返回放置的项目?或者其他一些端点可以吗?

感谢您的任何见解!

Mar*_*k B 7

您需要ReturnValues='ALL_NEW'根据put_item请求设置该属性才能在响应中返回该项目。如此处记录的

编辑:文档是错误的,ALL_NEW不被接受put_item。由于内存中有与传递给 的参数完全相同的项目put_item,因此您实际上不需要返回它。