【问题标题】:How do I extract only the key from a Google Cloud Datastore entity如何仅从 Google Cloud Datastore 实体中提取密钥
【发布时间】:2021-06-29 20:38:30
【问题描述】:

我正在使用 gcloud cli 工具处理一个项目。我正在使用 Python + Flask 来开发应用程序。我的主要参考点是Google Datastore documentationthis How-to tutorial guide

我的数据存储区中有一些实体,这些实体具有一些属性。实体在应用程序中创建,密钥设置为默认密钥(a.k.a 不完整的密钥)。

我可以访问实体。并且使用投影,我还可以访问每个实体的属性。但是,有没有办法只从实体中提取密钥?示例:

>>> print(list(user_query.fetch()))
[<Entity('User', 5097358505279488) {...}>]

当我想访问属性时,这可以正常工作。但是,我无法访问密钥509..。我也试过:

>>> for user in user_query.fetch():
       print(user.key)
       ...
>>> <Key('User', 5097358505279488), project=...>

虽然它返回整个 Key 对象,但我找不到只提取密钥的方法。我已经搜索了解决方案的文档,但它没有返回任何内容。我想知道目前这是否可能。

【问题讨论】:

  • 文档暗示 Keys 是 JSON 对象。您可以使用 typical method of working with JSON objects in Python 访问单个 keyValue 元素吗?
  • @Frodnar 不幸的是,这不起作用:(它会引发以下错误:TypeError: Object of type Key is not JSON serializable。我认为密钥的存储方式与其他属性不同。
  • 讨厌把你送进另一个兔子洞,因为我自己显然不明白这个问题,但它可以存储为protocol buffer...吗?
  • @Frodnar 我认为这是不可能的,因为 Datastore API 不允许这样做。但我仍然感谢您的帮助。

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


【解决方案1】:

听起来您正在尝试获取 key.id 的投影。不幸的是,这是不可能的。您可以执行一个返回keyskeys-only 查询,然后您可以使用列表推导来获取您想要的数据,例如[key.id_or_name for key in key_only_query.fetch_page()]

【讨论】:

  • 虽然解决方案与您描述的不完全一样,但我最终还是想出了我需要的解决方案。非常感谢您的帮助。
【解决方案2】:

你用这个来获取id

print(user.key.id)

【讨论】:

    【解决方案3】:

    您可以调用数据存储实体上的 .id 属性来获取作为整数值的键。

    for user in user_query.fetch():

    print(user.id)

    【讨论】:

      猜你喜欢
      • 2020-04-11
      • 2018-02-14
      • 1970-01-01
      • 2018-08-24
      • 2021-09-13
      • 1970-01-01
      • 2018-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多