googleappengine检索从基类派生的类的实例

2024-10-03 11:19:07 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的GAE项目中,我有一个名为Part的基类。 从这个类中,我衍生出其他类,如电机和电池。你知道吗

如果我运行以下命令:

motors   = Motor.query().fetch()
batterys = Battery.query().fetch()

我会得到所有的部分,但我正在寻找更优雅的东西。 如果我跑:

parts    = Part.query().fetch()

我得到一个空列表[]。你知道吗

如何运行上述查询并在一个列表中获得所有结果? 谢谢


Tags: 项目命令列表电池fetchquery基类电机
2条回答

可以这样做,但所有零件类都必须从PolyModel继承

https://developers.google.com/appengine/docs/python/ndb/polymodelclass

所以呢

class Part(ndb.PolyModel):
  #stuff

class Motor(Part):
  # stuff

class Wheel(Part):
  # stuff

parts = Part.query().fetch()

但是,所有项都作为一部分存储在数据存储中,它们有一个附加的classes属性,用于命名继承继承结构中的每个类。然后在检索实体时,将实例化正确的子类。你知道吗

另一个潜在的缺点是,存储模型中的属性名是所有子类的联合,如果您对任何属性都有默认值的话。我还没查清楚这有多远。因此,如果在所有子类中都有许多非常不同的属性,则可能会存储许多空属性,并导致在每个实体中存储所有属性名的成本。你知道吗

数据存储没有继承的概念,也不知道您的实体类型是从Part派生的。你知道吗

对于GAE,实际上没有任何方法可以做到这一点:祖先键并不是真正的答案,因为它们将拥有所有电机/电池实体,从单个部件降下来,这将严重限制更新率。你知道吗

对这种关系建模的最佳方法实际上是删除单独的模型,使用一个part_type字段,该字段可以是"motor""battery"。你知道吗

相关问题 更多 >