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

Is there a way to update several entities using the google cloud console?

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

我需要更新几个实体,一个一个地更新是不切实际的。当我 运行 我在本地 GAE 服务器中的项目时,有没有办法进行更新查询或类似于 "admin server" 中存在的 "Interactive console" 的查询?

编辑:澄清一下,我想这样做而不需要在我的生产服务器中部署新代码。

我查看了文档,看起来执行更新查询的唯一方法是使用任何 Java or Python, I’ve reviewed the options available to manage Datastore by gcloud,并且没有 运行 GQL 查询的选项。

因此,实现您的目标的一个选择是在 Cloud Functions 上创建一个简单的应用程序,该应用程序执行给定参数的 GQL 查询。

正如 sergio franco 所指出的,可以使用 Cloud Functions 访问数据存储并更新实体。它仍然需要部署该功能,但由于它可以从控制台完成,因此它比向项目添加新代码并部署整个项目要简单和快速得多。

请务必记住,无论函数的大小如何,每次执行函数时您都需要付费。更多详情 here

  • 从左侧菜单转到 google cloud console 和 select "Cloud Functions",它在“计算”部分:

  • 选择"Create Function"
  • 给函数起一个描述性的名字(以后会更容易知道它做了什么)
  • 选择128Mb(根据内存分配情况收费)
  • 选择 HTTP 作为触发器
  • 由于此功能的目的是更新数据存储,我认为最好不要选中 "Allow unauthenticated invocations"
  • 选择"inline editor"
  • 选择 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()
  • 点击"Environment Variables, Network and More"
  • 在网络中,选择 "Allow internal traffic only"
  • 按"Create"
  • 等待函数部署
  • 转到 "Testing" 选项卡
  • 按"Test Function"

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

任何使用 print 调用的内容都会被发送到日志中

您可以像访问字典一样访问所有实体属性。

来源:

cloud functions python to access Datastore

https://googleapis.dev/python/datastore/latest/entities.html

https://cloud.google.com/functions/docs/quickstart-python