如何通过Google Cloud Datastore中的API(Python协议缓冲区)删除整个祖先树?
例如,如果我在这个结构中存储了实体:祖父母/父/子,我该如何删除祖父母,这样就删除了那个&#34;节点&#34;?<的所有子孙。 / p>
如果我在祖父母的密钥上提交删除请求,祖父母实体将被删除,但其子女和子女仍然存在,并且他们的路径仍然是祖父母/父/子,即使祖父母实体已被删除。
答案 0 :(得分:7)
删除父实体不会删除任何子实体。但是,您可以使用祖先查询来查找所有子实体的键,并将其作为单个事务的一部分删除。步骤将是:
以下是部分代码段:
# Create a transactional RunQueryRequest.
req = datastore.RunQueryRequest()
req.read_options.transaction = txn # From previous BeginTransactionRequest.
query = req.query
# Add an ancestor filter.
key_filter = query.filter.property_filter
key_filter.property.name = '__key__'
key_filter.operator = datastore.PropertyFilter.HAS_ANCESTOR
path_element = key_filter.value.key_value.path_element.add()
path_element.kind = 'ParentKind'
path_element.name = 'parent-name'
# Make it a keys-only query.
query.projection.add().property.name = '__key__'
batch = self.datastore.run_query(req)
for entity_result in batch:
# Add entity_result.entity.key to CommitRequest...