ndb.PolyModel作为常规实体的祖先-好主意吗?

时间:2019-01-25 00:38:56

标签: google-cloud-datastore

我想将一个ndb.PolyModel子实体作为另一个ndb.Model实体的祖先,因为我需要该子实体对于查询具有强烈的一致性。

这件事让我感到紧张。这是个坏主意吗?

1 个答案:

答案 0 :(得分:1)

据我了解,ndb.PolyModel背后的秘密之处在于它的实例具有一个名为“ class”的特殊属性。

这是继承链中所有类名的字符串的重复属性,当ndb将其从数据存储中拉出时,ndb然后使用该实例化相应的子类。

每个实例的键仍然是父类的键。

对于以下示例:

class Animal(ndb.PolyModel):

class Cat(Animal):

class Dog(Animal):

如果愿意

d = Dog(...)
d.put()

d.key仍然类似于ndb.Key('Animal', 123456789)

在数据存储查看器中,您只会有一个Animal表,而没有Dog表或Cat表。

因此,我想您可以安全地使用ndb.Key('Animal', 123456789)作为其他模型的祖先。