首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入数据前获取数据存储密钥

插入数据前获取数据存储密钥
EN

Stack Overflow用户
提问于 2018-08-10 17:22:33
回答 1查看 582关注 0票数 0

云数据存储(实体、属性和密钥)允许使用自动生成的数字ID (或输入自定义名称)标识实体。

我想在某些业务逻辑中使用自动生成的数字ID,然后将实体写入数据存储。

代码语言:javascript
复制
from google.cloud import datastore

ds = datastore.Client('my-project-id')

# Use automatically generated numeric ID.
key = ds.key('MyEntity')

# https://googlecloudplatform.github.io/google-cloud-python/latest/datastore/keys.html
my_id = key.id()

# Some business logic requiring unique ID for MyEntity
data = my_business_logic(my_id)

entity = datastore.Entity(key=key)
entity.update(data)
ds.put(entity)

然而,key.id()None,所以我得到了一个Python:

代码语言:javascript
复制
TypeError: 'NoneType' object is not callable

钥匙已记录在案,所以也许我用错了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-10 19:24:00

默认情况下,实体在进入数据存储区( put() )之前不会有完整的密钥(带有数字ID)。

对于像您这样的情况,您希望在将实体写入数据存储之前知道自动生成的数字ID,您可以使用数据存储客户端的allocate_ids方法,如下所示:

代码语言:javascript
复制
from google.cloud import datastore

ds = datastore.Client('my-project-id')

key = ds.allocate_ids(ds.key('MyEntity'), 1)[0]

my_id = key.id

data = my_business_logic(my_id)

entity = datastore.Entity(key=key)
entity.update(data)
ds.put(entity)

注意,allocate_ids使用两个参数,incomplete_keynum_ids,所以即使您只想要一个键,也需要指定它并提取结果列表的第一个(也是唯一)成员。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51791330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档