Storing and Retrieving Data with Cloud Datastore

Update your web service to connect to and handle data through Cloud Datastore. Use the Cloud Datastore client libraries to connect your web service to Cloud Datastore, a non-relational (NoSQL) database built for automatic scaling, high performance, and ease of application development.

In this step, you update your web service so that it stores page request data in Cloud Datastore and then displays a list of the last ten page requests. The goal here is to get data storage working for your web service before you add Firebase Authentication and personalize data storage for authenticated users.

Before you begin

If you have completed all the previous steps in this guide, skip this section. Otherwise, complete one of the following:

  • Start from Building a Python 3.7 App and complete all the steps leading up to this one.

  • If you already have a GCP project, you can continue by downloading a copy of the web service:

    1. Download the sample application repository using Git:

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

      Alternatively, you can download the sample as a zip file and then extract it.

    2. Navigate to the directory that contains a copy of the files from the previous step:

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

Storing and retrieving Cloud Datastore entities

Store and retrieve site request times as Cloud Datastore entities by completing the following:

  1. Add the following code to your main.py file:

    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

    The store_time method above uses the Cloud Datastore client libraries to create a new entity in Cloud Datastore. Cloud Datastore entities are data objects that consist of keys and properties. In this case, the entity's key is its custom kind, visit. The entity also has one property, timestamp, containing time of a page request.

    The fetch_times method uses the key visit to query the database for the ten most recent visit entities and then stores those entities in a list in descending order.

  2. Update your root method to call your new methods:

    @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. Update your templates/index.html file to print the timestamp of each entity:

    <h2>Last 10 visits</h2>
    {% for time in times %}
      <p>{{ time['timestamp'] }}</p>
    {% endfor %}
  4. Ensure that your requirements.txt file includes all necessary dependencies:

    Flask==1.1.1
    google-cloud-datastore==1.9.0
    

For more information about Cloud Datastore entities, properties, and keys, see Entities, Properties, and Keys. For more information on using Cloud Datastore client libraries, see Cloud Datastore Client Libraries.

Testing your web service

Test your web service by running it locally in a virtual environment:

  1. Run the following commands in your project's main directory to install new dependencies and run your web service. If you have not set up a virtual enviornment for local testing, see testing your web service.

    pip install -r requirements.txt
    python main.py
    
  2. Enter the following address in your web browser to view your web service:

    http://localhost:8080
    

    Tip: Refresh the page to create additional page requests and store more entities in Cloud Datastore.

You can view the entities that are created by your web service in the GCP Console:

Go to the Cloud Datastore entities page

Deploying your web service

Now that you have Cloud Datastore working locally, you can re-deploy your web service to App Engine.

Run the following command from the root directory of your project, where your app.yaml file is located:

gcloud app deploy

All traffic is automatically routed to the new version you deployed.

For more information on managing versions, see Managing Services and Versions.

Viewing your service

To quickly launch your browser and access your web service at https://GCP_PROJECT_ID.appspot.com, run the following command:

gcloud app browse

Next Steps

Now that you have Cloud Datastore working with your web service, you're ready to learn how to add Firebase to your web service.

Was this page helpful? Let us know how we did:

Send feedback about...

App Engine standard environment for Python 3