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



我认为答案是"是",但我想确认。如果一个ndb。模型是另一个数据库的"子"。模型(通过一对多关系),我可以删除KeyProperty并在查询中简单地使用祖先键吗?例如:

class Parent(ndb.Model):
    pass
class Child(ndb.Model):
    parent_key = ndb.KeyProperty(Parent)

我可以简单地删除parent_key而使用.filter(ancestor=parent_key)吗?

[update]:下面的问题得到了回答,但是前面的问题(关于查询)仍然存在。

在更深的层次上,祖先键"等同于"KeyProperty价值观?

No.

一个键可以由许多段组成,例如:

ndb.Key('Parent', 'grandma', 'Parent', 'dad', 'Child', 'you')

这存储在对象的key中,并且获得父级只是丢弃最后两个段并给出其余部分。所以对于上面的代码:

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)

,

>>> child.parent_key
None

最新更新