有没有办法用google云控制台更新多个实体?

问题描述 投票:0回答:1

在google云控制台中,我可以使用 "Datastore > Entities "来一次更新一个实体,或者是让 SELECT 使用GQL进行查询。

我需要更新几个实体,一个一个地更新是不现实的。当我在本地GAE服务器中运行项目时,有没有一种方法可以进行更新查询或类似于 "管理服务器 "中存在的 "交互式控制台"?

EDIT:为了澄清一下,我想在不需要在我的生产服务器中部署新代码的情况下做到这一点。

google-cloud-platform google-cloud-datastore
1个回答
1
投票

我看了一下文档,看起来执行更新查询的唯一方法是通过使用任何一个 Java或Python我回顾了通过以下方式来管理Datastore的选项 gcloud 而没有运行GQL查询的选项。

因此,要实现你的目标,可以选择在Cloud Functions上创建一个简单的应用程序,执行参数中给出的GQL查询。


1
投票

正如sergio franco所指出的,可以使用Cloud Functions访问数据存储并更新实体。依然需要部署函数,但由于这一切都可以从控制台完成,所以比起在项目中添加新代码并部署整个项目要简单快捷得多。

重要的是要记住,无论函数的大小,每次执行函数都会有价格。更多详情 此处

google cloud console menu showing Cloud Functions

  • 选择 "创建功能"
  • 给函数起一个描述性的名字(以后会更容易知道它的作用)。
  • 选择128Mb (根据内存分配情况,你会被收取费用)
  • 选择HTTP作为触发器
  • 由于这个函数的目的是更新数据存储,我认为最好不要勾选 "允许未经认证的调用"
  • 选择 "内联编辑器"
  • 选择Python 3.7作为运行时 (因为下面的例子将使用Python)
  • 在 "requirements.txt "选项卡中添加以下代码。
# Function dependencies, for example:
# package>=version
google-cloud-datastore==1.8.0
  • main.py选项卡。
from io import StringIO
from google.cloud import datastore
datastore_client = datastore.Client()

def update_books(request):
    buffer = StringIO()
    query = datastore_client.query(kind='Book')
    query.add_filter('author', '=', 'Terry Pratchett')

    data = query.fetch()

    for book in data:
        book['rating'] = '5 stars'
        client.put(book)
        buffer.write('Updated book {}'.format(book['title']))

    return buffer.getvalue()
  • 点击 "环境变量,网络和更多"
  • 在网络中,选择 "仅允许内部流量"
  • 按 "创建 "键
  • 等待功能部署
  • 进入 "测试 "选项卡
  • 按 "测试功能 "键

函数返回的任何内容,都将被打印在页面的 "输出 "部分。

任何用 print 将被发送到日志

你可以像访问一个dict一样访问所有实体的属性。

来源:云函数

云端函数 python访问Datastore

https:/googleapis.devpythondatastorelatestentities.html。

https:/cloud.google.comfunctionsdocsquickstart-python。

© www.soinside.com 2019 - 2024. All rights reserved.