Cloud Datastore(Entities, Properties, and Keys)允许使用自动生成的数字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:
TypeError: 'NoneType' object is not callable
Key is documented,所以也许我使用了错误的吸气剂?
答案 0 :(得分:0)
默认情况下,在实体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
接受2个参数,incomplete_key
和num_ids
,因此,即使您只想要一个键,也需要指定它并提取第一个(也是唯一一个)结果列表的成员。