有没有一种方法可以使用Google Cloud Console更新多个实体?

时间:2020-04-29 14:41:04

标签: google-cloud-platform google-cloud-datastore

在Google云控制台中,我可以使用“数据存储>实体”一次更新一个实体,或使用GQL进行SELECT个查询。

我需要更新几个实体,并且一个接一个地做是不切实际的。当我在本地GAE服务器中运行项目时,是否可以执行更新查询或类似于“管理服务器”中存在的“交互式控制台”的方法?

编辑:为澄清起见,我想执行此操作而无需在生产服务器中部署新代码。

2 个答案:

答案 0 :(得分:1)

我看了看文档,看来执行更新查询的唯一方法是使用任何Java or Python,我已经审查了gcloud可以用来管理数据存储的选项,没有运行GQL查询的选项。

达到目标的一种选择是在Cloud Functions上创建一个简单的应用程序,该应用程序执行参数中给出的GQL查询。

答案 1 :(得分:1)

正如sergio franco所述,可以使用Cloud Functions来访问数据存储并更新实体。仍然需要部署该功能,但是由于可以通过控制台完成所有工作,因此,与向项目中添加新代码并部署整个项目相比,它要简单得多,而且速度也快。

请务必记住,无论函数的大小如何,每次执行函数时都要为您定价。更多详细信息here

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调用的所有内容都会发送到日志

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

来源:

cloud functions python to access Datastore

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

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

相关问题