2017-12-17 24 views
0

デバイスは私のパーティションキーです。テーブルは複数の異なるユーザーを同じデバイスの下に置くためのものです。ただし、次のput_item()コードを実行すると、同じDeviceキーがある場合は各ユーザーを上書きします。Dynamodb put_item()はデータを上書きします

例:device変数としてMonitorを入力し、gomez変数をaliasInput変数に設定して実行します。 device変数としてMonitorとして再度実行しますが、craigとしてaliasInputと入力すると、gomezのエントリが上書きされます。私のテーブルにデータを入力する

機能:

import boto3 
import json 
import decimal 
import time 
import datetime 

# Helper class to convert a DynamoDB item to JSON. 
class DecimalEncoder(json.JSONEncoder): 
    def default(self, o): 
     if isinstance(o, decimal.Decimal): 
      if o % 1 > 0: 
       return float(o) 
      else: 
       return int(o) 
     return super(DecimalEncoder, self).default(o) 


dynamodb = boto3.resource('dynamodb', region_name='us-west-2', endpoint_url="http://localhost:8000") 

table = dynamodb.Table('WishListTest') 

device = input('What is the Item being requested?\n') 
device = device.upper() 

aliasInput = input('What is the Alias of the user?\n') 
aliasInput = aliasInput.upper() 

date = int((time.strftime("%d%m%Y"))) 
response = table.put_item(
    Item={ 
     'Device': device, 
     'RequestList': { 
      'Alias': aliasInput, 
      'Date': date 
     }, 
     'AvailableQuanity': 0, 
     'ReserveQuanity': 0, 

    } 
) 

print("PutItem succeeded:") 
print(json.dumps(response, 
+1

あなたが結果として見たいと思って何をすべきかのサンプル出力を提供していただけますか? 'Monitor'デバイスの複数の行、または複数の 'aliasInput'を持つ1つのレコード? – GSazheniuk

答えて

1

あなたはupdate_item()を探しています。 AttributeUpdatesが推奨されていませんので、あなたはUpdateExpressionを使用する必要がありますが、この単純な例では、あなたが始める必要があります。

response = table.update_item(
    Key={ 
    'Device': device, 
    }, 
    AttributeUpdates={ 
    'RequestList': { 
     'Alias': aliasInput, 
     'Date': date 
    }, 
    'AvailableQuanity': 0, 
    'ReserveQuanity': 0, 
    }, 
) 
+0

私はまだ追加するのではなく、まだアイテムを置き換えているところに問題があります。 –

関連する問題