PynamoDBを使ってAWSのDynamoDBを操作してみました。
アナコンダでpynamodbをインストール済みです。
[toc]データモデルの定義
models.py
from pynamodb.models import Model from pynamodb.attributes import UnicodeAttribute class UserModel(Model): """ A DynamoDB User """ class Meta: aws_access_key_id = 'キー' aws_secret_access_key = 'シークレット' table_name = 'dynamodb-user' region = 'us-west-2' email = UnicodeAttribute(hash_key=True) first_name = UnicodeAttribute() last_name = UnicodeAttribute()
AWSのルートもしくはIAMユーザのアクセスキーなどの認証情報を記載することで、 DynamoDBへアクセスすることができます。
ローカルのフォルダに認証情報が格納されていれば、コードに記載する必要はないかもしれません。
hashキーは、必ず1つ含めないといけないもので、データを検索するときなどに使います。
テーブルの作成
python consoleから以下のコマンドを入力しテーブルを作成します。
import models
models.UserModel.create_table(read_capacity_units=1, write_capacity_units=1)
キャパシティユニットは、1秒間に何回読み書きができるかを示す値です。
A read capacity unit represents one strongly consistent read per second, or two eventually consistent reads per second, for an item up to 4 KB in size.
データの挿入
user = models.UserModel('koko@example.com', first_name='Ain', last_name='Stain') user.save()
データの検索
データの全検索、アイテム数、ハッシュキーで検索です。
アイテム数はリアルタイムでは更新されず、6時間ほど経つと更新されるようです。いつまで経っても0のままで焦りました。
import models # テーブル全検索 for i in models.UserModel.scan(): print(i.email + ":" + i.first_name + ":" + i.last_name) # テーブルの項目数カウント print(models.UserModel.count()) # ハッシュキーで検索 try: ret = models.UserModel.get("koko@example.com") print(ret) except models.UserModel.DoesNotExist: print("not found")
更新
# 更新 user = models.UserModel.get('test@example.com') user.first_name = 'Robert' user.save()