DynamoDB insert(put)item - 返回创建的项目?

时间:2017-01-27 23:40:08

标签: 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}}

这很不幸,因为我有这样的逻辑:

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' : { ... }})

应该能够返回put'd项吗?或者其他一些终点可以吗?

感谢您的任何见解!

1 个答案:

答案 0 :(得分:4)

您需要在ReturnValues='ALL_NEW'请求中设置属性put_item,以便在回复中返回该项目。记录在案here

修改:文档错误,ALL_NEW未接受put_item。由于您在内存中的确切项目是您传递给put_item的参数,因此您根本不需要将其返回。