LoginSignup
2
2

More than 3 years have passed since last update.

PynamoDB でテーブル作成・検索・作成

Posted at

やりたいこと

  • DynamoDBをMACから触れるようにする
  • pynamoDBでテーブル操作する

前提条件

  • AWS Access Key ID と AWS Secret Access KeyはGET済み

行ってみよう!

DynamoDBをMACから触れるようにする

公式サイトからAWS CLI バージョン 2 のインストール

  1. ブラウザで、macOS pkg ファイルをダウンロードします: https://awscli.amazonaws.com/AWSCLIV2.pkg
  2. ダウンロードしたファイルをダブルクリックして、インストーラを起動します。
  3. 画面上の指示に従ってください。AWS CLI バージョン 2 は以下の方法でインストールできます。 (参考) https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2-mac.html これで、コマンドでAWSを触れるようになりました。

aws configure で AWSと連携

(venv) mbp:wanted user$ aws configure
AWS Access Key ID [None]: ABCDEFGHIJGLMNOPQRSTUVWXYZ
AWS Secret Access Key [None]: SECRETKEYSECRETKEYSECRETKEYSECRETKEY
Default region name [None]: ap-northeast-1
Default output format [None]: 

対話式で、アクセスキーとシークレットキーを入力すれば連携が完了

テーブルの作成

from datetime import datetime

from pynamodb.attributes import UnicodeAttribute, UTCDateTimeAttribute, MapAttribute, NumberAttribute
from pynamodb.models import Model


class AccountMap(MapAttribute):
    """
    アカウント情報
    """
    price = NumberAttribute(null=True)
    search_limit_num = NumberAttribute(null=True)
    url = UnicodeAttribute(null=True)


class Users(Model):
    """
    ユーザ情報
    """

    class Meta:
        table_name = "Users"
        region = 'ap-northeast-1'

    id = UnicodeAttribute(hash_key=True)
    password = UnicodeAttribute()
    login_date = UTCDateTimeAttribute()
    start_date = UTCDateTimeAttribute(default=datetime.now())
    account = AccountMap()


# ユーザテーブルの作成
if not Users.exists():
    Users.create_table(read_capacity_units=1, write_capacity_units=1, wait=True)

こんな感じで、作れる。Django感、半端ないです^^

検索

query

キーを指定してから、検索

def get_user_info(user_id, password, month_password):
    """
    パスワード認証
    :param user_id:
    :param password:
    :param month_password:
    :return:
    """
    # TODO トークンの取得
    token = "local"

    # ユーザIDとパスワードと今月のパスワードとトークン
    for user_data in Users.query(user_id, (Users.password == password) & (Users.month_password == month_password) & (
            Users.token == token)):
        return user_data

    return None

queryで検索

scan

キーを指定せずに、検索

Users.scan(Users.id==user_id)

保存

    # データの作成
    users = Users('onehundred')
    users.password = "password"
    users.token = "local"
    users.month_password = "month_password"
    users.login_date = datetime.now()
    users.start_date = datetime.now()
    users.account = {
        "price": 1000,
        "search_limit_num": 10,
        "pay_pal_url": "https://paypal.com",
    }
    users.save()
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2