2017-01-27 12 views
3

私はDynamoDBのテーブルにレコード(アイテム)を挿入、私はAWSからの応答が実際の項目が挿入され含まれていません実現:DynamoDB insert(put)item - 作成されたアイテムを返しますか?私のPythonスクリプトで

{'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オブジェクトは単なる辞書のようなものですが、単なる1つの表現を使うことができてうれしいです。また、put_itemのように思われます

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

put'dアイテムを返すことができるはずですか?それとも、他のエンドポイントができますか?

ありがとうございました!

答えて

3

あなたのput_itemリクエストで、応答の項目を返すように、プロパティReturnValues='ALL_NEW'を設定する必要があります。文書化here

編集とおり:ドキュメントが間違っているALL_NEWput_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あなたは正しいです、私は私の答えを更新しました。 –

関連する問題