Google Cloud Datastoreにデータを登録する(Not GAE)

Sep 27, 2016 · 156 words · 1 minute read GCP Datastore Python

GAEからではなく、ローカルからPython3でCloud Datastoreにデータを登録してみました。

事前準備

サービスアカウント作成して鍵を取得

  • Google Cloud Platform Consoleを開く
  • API Manager - 認証情報で認証情報を作成する
    • 認証情報を作成ボタン - サービスアカウントキー
    • サービスアカウント新しいサービスアカウントを選択(未作成の場合)
    • アカウント名と役割を入力して、キーのタイプを選択する(jsonが推奨)

作成すると認証情報のファイルがダウンロードできます。

ライブラリの準備

gcloudをpip等でインストールします

$ pip install gcloud

コード

イメージ

作成するTodoリストのイメージ

  • Kind
    • Todo
  • Property
    • text - String
    • done - Bool
    • created - Datetime

事前準備でダウンロードしたファイルをservice_account_key.jsonとする

put

#!/usr/bin/env python
# coding: utf-8

import os
from datetime import datetime
from gcloud import datastore

PROJECT_NAME = 'プロジェクト名'

def main():
    service_account_file = os.path.join(os.path.dirname(__file__), 'service_account_key.json')
    client = datastore.Client.from_service_account_json(service_account_file,
                                                        project=PROJECT_NAME)

    key = client.key('Todo')
    todo = datastore.Entity(key)
    todo.update({
        'text': '牛乳を買う',
        'done': False,
        'created': datetime.now()
    })

    client.put(todo)

if __name__ == '__main__':
    main()

get

#!/usr/bin/env python
# coding: utf-8

import os
from gcloud import datastore

PROJECT_NAME = 'プロジェクト名'

def main():
    service_account_file = os.path.join(os.path.dirname(__file__), 'service_account_key.json')
    client = datastore.Client.from_service_account_json(service_account_file,
                                                        project=PROJECT_NAME)

    query = client.query(kind='Todo')
    query.add_filter('done', '=', False)
    query.order = ['created']

    print([dict(entity) for entity in query.fetch()])

if __name__ == '__main__':
    main()

Datastore Emulator

DatastoreへのアクセスもGAEと同じように開発環境が用意されています。

エミュレータ起動

起動にはGoogle Cloud SDKが必要です。

$ gcloud beta emulators datastore start --project=プロジェクトID
# エミュレータがインストールされていない場合はインストールが始まります。

管理画面を開くにはhttp://localhost:xxxx/_ah/adminにアクセスします(ポート番号は毎回違うようです)

エミュレータを実行したら$(gcloud beta emulators datastore env-init)を別のコンソールで実行してエミュレータにつなぐための環境変数を設定します。

あとは作成したプログラムを実行すると、エミュレータにデータが登録されます。