PythonからAWSの各リソースにアクセスするにはboto3を利用します。
AWS Lambdaで利用する際は、そのままboto3が扱えるのでLambdaパッケージにboto3を含める必要はありません。
DynamoDBのリソースを取得
import boto3 dynamodb = boto3.resource('dynamodb')
Itemの登録
idがパーテーションキーのuserテーブルにitemを登録する例。
now = time.time() usertable = dynamodb.Table("user") usertable.put_item( Item={ 'id': 1, 'username': 'YourName', 'email': 'youremail@domain', 'accepted_at': decimal.Decimal(str(now)), } )
DynamoDBはdate型のフィールドがないので、Decimal型でUnixタイムスタンプを登録しています。DB上で日付比較してフェッチしない場合はタイムゾーン込みの文字列として、2020-06-06T16:43:00.000+09:00
のように保存しても問題ないと思う。
Itemの更新
Key
で更新対象のitemを指定し、UpdateExpression
でプリペーアドクエリを、ExpressionAttributeValues
でプレースホルダにbindする値を記述する。
usertable = dynamodb.Table("user") response = usertable.update_item( Key={ 'id': 1 }, UpdateExpression="set username = :userName", ExpressionAttributeValues= { ':userName': 'YourFriendName' }, ReturnValues='UPDATED_NEW' )
尚、更新後の値をReturnValues
として指定すると更新した値を更新と同時に受け取ることができる。
response['Attributes']['username']
プリペーアドクエリ
プリペアードクエリはSQLのアップデート文ライクに記述できる。
例えば、
UpdateExpression="set value = value + 1"
のようにフィールドの値に対して操作することができる。尚、RDB同様、書き込みは直列に行われるので、上記の記述だとロストアップデートの対象にならない。
リンク