云数据存储(实体、属性和密钥)允许使用自动生成的数字ID (或输入自定义名称)标识实体。
我想在某些业务逻辑中使用自动生成的数字ID,然后将实体写入数据存储。
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:
TypeError: 'NoneType' object is not callable钥匙已记录在案,所以也许我用错了吗?
发布于 2018-08-10 19:24:00
默认情况下,实体在进入数据存储区( put() )之前不会有完整的密钥(带有数字ID)。
对于像您这样的情况,您希望在将实体写入数据存储之前知道自动生成的数字ID,您可以使用数据存储客户端的allocate_ids方法,如下所示:
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_key和num_ids,所以即使您只想要一个键,也需要指定它并提取结果列表的第一个(也是唯一)成员。
https://stackoverflow.com/questions/51791330
复制相似问题