Cloud Datastore を使用したデータの保存と取得

ウェブサービスを更新して、Cloud Datastore に接続してデータを処理できるようにします。Cloud Datastore クライアント ライブラリを使用して、ウェブサービスを Cloud Datastore に接続します。Cloud Datastore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するために構築された非リレーショナル(NoSQL)データベースです。

このステップでは、ページ リクエスト データを Cloud Datastore に保存し、直近 10 回のページ リクエストの一覧がページに表示されるように、ウェブサービスを更新します。ここでは、Firebase Authentication を追加して、認証済みユーザーのデータ ストレージをカスタマイズする前に、ウェブサービスに対してデータ ストレージが機能するようにします。

始める前に

このガイドでこれまでのステップをすべて完了している場合は、このセクションをスキップできます。それ以外の場合は、次のいずれかを実行してください。

  • Python 3.7 アプリのビルドから始めて、これまでのステップをすべて完了します。

  • GCP プロジェクトがすでにある場合は、ウェブサービスのコピーをダウンロードすれば続行できます。

    1. Git を使用してサンプル アプリケーション リポジトリをダウンロードします。

      git clone https://github.com/GoogleCloudPlatform/python-docs-samples
      

      または、zip 形式のサンプルをダウンロードして展開します。

    2. 前のステップで用意したファイルのコピーがあるディレクトリに移動します。

      cd python-docs-samples/appengine/standard_python37/building-an-app/building-an-app-1
      

Cloud Datastore エンティティの保存と取得

次のように、Cloud Datastore エンティティとしてサイト リクエスト時間を保存および取得します。

  1. main.py ファイルに次のコードを追加します。

    from google.cloud import datastore
    
    datastore_client = datastore.Client()
    
    def store_time(dt):
        entity = datastore.Entity(key=datastore_client.key('visit'))
        entity.update({
            'timestamp': dt
        })
    
        datastore_client.put(entity)
    
    def fetch_times(limit):
        query = datastore_client.query(kind='visit')
        query.order = ['-timestamp']
    
        times = query.fetch(limit=limit)
    
        return times

    上記の store_time メソッドでは、Cloud Datastore クライアント ライブラリを使用して、Cloud Datastore 内に新しいエンティティを作成しています。Cloud Datastore エンティティは、キーとプロパティで構成されたデータ オブジェクトです。この場合、エンティティのキーはカスタムの kind である visit です。エンティティには timestamp というプロパティがあり、ページ リクエストの時間が含まれています。

    fetch_times メソッドではキー visit を使用して最近の 10 個の visit エンティティについてデータベースに対してクエリを実行し、それらのエンティティを降順で一覧に保存します。

  2. root メソッドを更新して新しいメソッドを呼び出します。

    @app.route('/')
    def root():
        # Store the current access time in Datastore.
        store_time(datetime.datetime.now())
    
        # Fetch the most recent 10 access times from Datastore.
        times = fetch_times(10)
    
        return render_template(
            'index.html', times=times)
  3. templates/index.html ファイルを更新して各エンティティの timestamp を出力します。

    <h2>Last 10 visits</h2>
    {% for time in times %}
      <p>{{ time['timestamp'] }}</p>
    {% endfor %}
  4. requirements.txt ファイルに必要な依存関係がすべて含まれていることを確認します。

    Flask==1.0.2
    google-cloud-datastore==1.7.3
    

Cloud Datastore のエンティティ、プロパティ、キーについて詳しくは、エンティティ、プロパティ、およびキーをご覧ください。Cloud Datastore クライアント ライブラリの使用について詳しくは、Cloud Datastore のクライアント ライブラリをご覧ください。

ウェブサービスのテスト

virtualenv を使用して依存関係を処理し、ウェブサービスをローカルで実行してテストします。

  1. プロジェクトのメイン ディレクトリで次のコマンドを実行して、新しい依存関係をインストールし、ウェブサービスを実行します。ローカルテスト用に virtualenv を設定していない場合は、ウェブサービスのテストを参照してください。

    pip install -r requirements.txt
    python main.py
    
  2. ウェブサービスを表示するには、ウェブブラウザに次のアドレスを入力します。

    http://localhost:8080
    

    ヒント: ページを更新して追加のページ リクエストを作成し、Cloud Datastore にさらにエンティティを保存します。

ウェブサービスによって作成されたエンティティは、GCP Console に表示されます。

Cloud Datastore のエンティティ ページに移動

ウェブサービスのデプロイ

Cloud Datastore がローカルで動作するようになったので、ウェブサービスを App Engine に再デプロイします。

app.yaml ファイルがあるプロジェクトのルート ディレクトリで、次のコマンドを実行します。

gcloud app deploy

すべてのトラフィックは、デプロイした新しいバージョンに自動的にルーティングされます。

バージョン管理の詳細については、サービスとバージョンの管理をご覧ください。

サービスを表示する

ブラウザを速やかに起動して https://GCP_PROJECT_ID.appspot.com でウェブサービスにアクセスするには、次のコマンドを実行します。

gcloud app browse

次のステップ

Cloud Datastore をウェブサービスで使用できるようになったので、次にウェブサービスに Firebase を追加する方法を学習します。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Python 3 の App Engine スタンダード環境