Google Cloud Datastore 客户端库创建实体

Posted

技术标签:

【中文标题】Google Cloud Datastore 客户端库创建实体【英文标题】:Google Clode Datastore Client Library creating an entity 【发布时间】:2019-03-22 10:32:28 【问题描述】:

我正在研究谷歌云数据存储 API 的一些文档

即https://googleapis.github.io/google-cloud-python/latest/datastore/client.html 和 https://googleapis.github.io/google-cloud-python/latest/_modules/google/cloud/datastore/entity.html#Entity

使用这两种来源,我创建了以下内容。我对 client.key() 感到非常困惑,即 1234 和命名空间。我的数据存储区显示的密钥似乎是随机的?唯一编号,我没有看到对命名空间的任何引用。为什么此代码示例指定整数和命名空间?有没有更好的方法来生成密钥,或者这两个参数可以安全地省略吗?

    from google.cloud import datastore
    client = datastore.Client()
    key = client.key('Collection', 1234, namespace='_Doctest')
    entity = datastore.Entity(key=key)
    entity['property'] = 'value'
    client.put(entity)

【问题讨论】:

【参考方案1】:

我通常在没有命名空间的情况下直接创建键,只使用实体类型并让数据存储完成其余的工作(您也可以指定一个 ID,但它是可选的)这样您就可以创建一个实体使用 partial 键(仅指定种类)并且一旦您 put 数据存储区中的实体,实体键将更新为 ID,成为完整键(现在有种类和 ID

key = client.key('Collection') # create partial key <Key('Collection')>
entity = datastore.Entity(key=key) # create entity using the partial key
entity['property'] = 'value'
client.put(entity)

# Print the full key <Key('Collection', 5293786145123) project=project-id>
print(f"Entity key = entity.key") 

注意:您还可以通过将父键添加到新实体键分配中来创建具有父键(实体组)的键第一行

key = client.key('Collection', parent=<parent_key>)

【讨论】:

感谢您的回复。我正在运行 key = datastore_client.key('Collection') google.api_core.exceptions.InvalidArgument: 400 关键路径元素不能不完整:[Collection:] 我认为我需要研究一些概念,但应该将 . key() 正在创建用于集合的新密钥? 我发布了一个不同的问题(认为是吗?)***.com/questions/55620409/…

以上是关于Google Cloud Datastore 客户端库创建实体的主要内容,如果未能解决你的问题,请参考以下文章

Google Cloud Endpoints 与 Cloud Datastore api 服务之间的比较

库 appengine.api.datastore 和 com.google.cloud.datastore 有啥区别?

在 Google Cloud Datastore 上使用动态类型

Google Cloud Datastore Emulator 如何验证我们的 datastore-index.xml?

无法连接到本地 Google Cloud Datastore 模拟器

抛开价格不谈,为啥要选择 Google Cloud Bigtable 而不是 Google Cloud Datastore?