Python NDB KeyProperty属性是否等同于查询中的祖先键?

Python NDB KeyProperty属性是否等同于查询中的祖先键?,python,app-engine-ndb,Python,App Engine Ndb,我想答案是“是”,但我需要确认。如果一个ndb.Model是另一个ndb.Model的“子级”(通过一对多关系),我可以删除KeyProperty并在查询中简单地使用祖先键吗?例如: class Parent(ndb.Model): pass class Child(ndb.Model): parent_key = ndb.KeyProperty(Parent) ndb.Key('Parent', 'grandma', 'Parent', 'dad', 'Child', 'y

我想答案是“是”,但我需要确认。如果一个ndb.Model是另一个ndb.Model的“子级”(通过一对多关系),我可以删除KeyProperty并在查询中简单地使用祖先键吗?例如:

class Parent(ndb.Model):
    pass

class Child(ndb.Model):
    parent_key = ndb.KeyProperty(Parent)
ndb.Key('Parent', 'grandma', 'Parent', 'dad', 'Child', 'you')
我可以简单地删除
parent\u键
而改用
.filter(祖先=parent\u键)

[更新]:回答了以下问题,但保留了先前的问题(关于查询)

在更深层次上,祖先键是否与KeyProperty“等效” 价值观

没有

密钥可以由许多段组成,例如:

class Parent(ndb.Model):
    pass

class Child(ndb.Model):
    parent_key = ndb.KeyProperty(Parent)
ndb.Key('Parent', 'grandma', 'Parent', 'dad', 'Child', 'you')
这将存储在对象的
键中,获取父对象只会丢弃最后两段,并给出其余部分。因此,对于上述情况:

ndb.Key('Parent', 'grandma', 'Parent', 'dad')
KeyProperty
与此无关,它只是实体拥有的一个属性

因此,如果您要创建:

child = Child(parent=ndb.Key('Parent', 'grandma', 'Parent', 'dad'))
你会发现的

>>> child.key
ndb.Key('Parent', 'grandma', 'Parent', 'dad', 'Child', None)


假设所有子实体都是使用祖先创建的,那么.filter(parent_key=key)比.filter(parent=key)好还是比.filter(parent=key)差,其中key=ndb.key('parent',…)?这取决于您对更好还是更差的定义。祖先查询在实体组内进行查找,从而使查询立即一致,但在实体组内也限制为1个QPS。1个QPS限制是否适用于ndb.get_multi()或entity.put()?或者只对Child.query(…)?@BrentWashburne很抱歉,它适用于写入此实体组。