目的
DynamoDBを使った方法をメモ。
boto3を使う前提。
前提
扱うテーブルはパーティションキーとソートキーがあるテーブルとする。
事前準備
対象のテーブルを指定する関数を定義。(別に関数を用意しなくてもよい)
def getTable():
return boto3.resource('dynamodb').Table('テーブル名')
検索
・パーティションキーとソートキーを指定して一意検索
一意検索
rst = getTable().query(
KeyConditionExpression = Key('パーティションキー名').eq('検索項目') & Key('ソートキー').eq('検索項目')
)
※and条件は「&」、or条件は「|」で指定する。
・前方一致
ソートキーの前方一致検索
rst = getTable().query(
KeyConditionExpression = Key('パーティションキー名').eq('検索項目') & Key('ソートキー名').begins_with('検索文字列')
)
※パーティションキーを指定しないとエラーになる。
・パーティションキーのみで検索
rst = getTable().scan(
FilterExpression= Key('パーティションキー').eq('検索項目')
)
更新
1レコード更新
getTable().update_item(
Key = {
'パーティションキー名': 'パーティションキーの値',
'ソートキー名': 'ソートキーの値'
},
UpdateExpression = 'set ' \
+ '更新カラム名1' + '=:' + '更新カラム名1' + ',' \
+ '更新カラム名2' + '=:' + '更新カラム名2',
ExpressionAttributeValues = {
':' + '更新カラム名1' : `更新する値1`,
':' + '更新カラム名2' : `更新する値2`
},
ReturnValues="UPDATED_NEW"
)
登録
1レコード登録
getTable().put_item(
Item = {
# パーティションキー
'パーティションキー名': 'パーティションキーの値',
# ソートキー
'ソートキー名': 'ソートキーの値',
# カラム1
'カラム名': 'カラム1の値'
}
)
削除
1レコード削除
getTable().delete_item(
Key = {
# パーティションキー
'パーティションキー名': 'パーティションキーの値',
# ソートキー
'ソートキー名': 'ソートキーの値'
}
)
最後に
違う検索方法を知ったときに随時メモを増やしていきたい。