存储和检索数据

区域 ID

REGION_ID 是 Google 根据您在创建应用时选择的区域分配的缩写代码。此代码不对应于国家/地区或省,尽管某些区域 ID 可能类似于常用国家/地区代码和省代码。对于 2020 年 2 月以后创建的应用,REGION_ID.r 包含在 App Engine 网址中。对于在此日期之前创建的现有应用,网址中的区域 ID 是可选的。

详细了解区域 ID

更新您的 Web 服务,使其连接 Datastore 模式的 Firestore (Datastore) 并处理数据。使用 Datastore 客户端库将您的 Web 服务连接到 Datastore,这是一个非关系型 (NoSQL) 数据库,可实现自动扩缩、高性能,且便于应用开发。

在此步骤中,您将更新 Web 服务,以便将页面请求数据存储到 Datastore 中,然后显示最近十次页面请求的列表。该操作的目标是,在您为经过身份验证的用户添加 Firebase 身份验证和个性化数据存储之前,使数据存储能够正常用于您的 Web 服务。

准备工作

如果您已完成本指南中前面的所有步骤,请跳过此部分。否则,请完成以下任一操作:

  • 构建 Python 3 应用开始,完成这一步之前的所有步骤。

  • 如果您已有 Google Cloud 项目,则可以下载 Web 服务的副本继续操作:

    1. 使用 Git 下载示例应用代码库:

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

      或者,您也可以下载该示例的 zip 文件并将其解压缩。

    2. 导航到上一步骤中包含文件副本的目录:

      cd python-docs-samples/appengine/standard_python3/building-an-app/building-an-app-1
      
    3. 启用 Datastore API:

      gcloud services enable datastore.googleapis.com
      

存储和检索 Datastore 实体

完成下列操作,将网站请求时间作为 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 方法使用 Datastore 客户端库在 Datastore 中创建新实体。Datastore 实体是由键和属性组成的数据对象。在本示例中,实体的键是其自定义种类,即 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(tz=datetime.timezone.utc))
    
        # 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==3.0.0
    google-cloud-datastore==2.15.1
    

如需详细了解 Datastore 实体、属性和键,请参阅实体、属性和键。如需详细了解如何使用 Datastore 客户端库,请参阅 Datastore 客户端库

测试您的 Web 服务

通过在虚拟环境中本地运行 Web 服务来对其进行测试:

  1. 在项目的主目录中运行以下命令,以安装新的依赖项并运行 Web 服务。如果您尚未为本地测试设置虚拟环境,请参阅测试 Web 服务

    pip install -r requirements.txt
    python main.py
    
  2. 在网络浏览器中输入以下地址,以查看您的 Web 服务:

    http://localhost:8080
    

您可以在 Google Cloud 控制台中查看您的 Web 服务创建的实体:

转到“Datastore 实体”页面

部署 Web 服务

在本地正常运行 Datastore 后,您可以将 Web 服务重新部署到 App Engine。

app.yaml 文件所在项目的根目录运行以下命令:

gcloud app deploy

所有流量都会自动路由到您部署的新版本。

如需详细了解如何管理版本,请参阅管理服务和版本

查看您的服务

如需快速启动浏览器并通过 https://PROJECT_ID.REGION_ID.r.appspot.com 访问您的 Web 服务,请运行以下命令:

gcloud app browse

后续步骤

现在,您已将 Datastore 应用于您的 Web 服务,接下来可了解如何将 Firebase 添加到 Web 服务中。