在新的数据存储模式文档中,有mention of allocateIds()
method。但是,除了单个段落外,没有示例代码说明如何使用此方法。
我每次创建新实体时都试图分配一个ID,以便可以将ID保存为实体本身的属性。
我认为在伪代码中,它的工作方式如下:
allocateIds()
user_id = allocateIds(number_id_ids=1)
user_key = datastore_client.key(kind='User', user_id)
user = datastore.Entity(key=user_key)
user.update({ 'user_id': user_id }) # Allows a get_user_by_id() query
datastore_client.put(user)
在实践中到底如何工作?
[当您调用allocateIds()
函数时,它会在调用“键”的构造函数时调用allocateIds()
的新实例,它会使用您提供的所有参数class Key(object)
,并通过allocateIds
方法重新组合它们。这就是产生密钥的原因。
((如果您想自己查看代码)
来源:_combine_args
是,https://googleapis.dev/python/datastore/latest/_modules/google/cloud/datastore/key.html#Key应该适用于要从数据存储模式获取ID并将其用作ID和属性值的情况:
allocateIds()
对于大多数只需要一个自动ID的情况,可以跳过from google.cloud import datastore
client = datastore.Client()
# Allocate a single ID in kind User
# Returns list of keys
keys = client.allocate_ids(client.key('User'), 1)
# Get key from list
key = keys[0]
print(key.id)
# Create a User entity using our key
user = datastore.Entity(key)
# Add ID as a field
user.update({
'user_id': key.id
})
# Commit to database
client.put(user)
# Query based on full key
query = client.query(kind='User')
query.key_filter(user.key, '=')
results = list(query.fetch())
print(results)
:
allocate_ids