2024-10-03 11:19:07 发布
网友
在我的GAE项目中,我有一个名为Part的基类。 从这个类中,我衍生出其他类,如电机和电池。你知道吗
如果我运行以下命令:
motors = Motor.query().fetch() batterys = Battery.query().fetch()
我会得到所有的部分,但我正在寻找更优雅的东西。 如果我跑:
parts = Part.query().fetch()
我得到一个空列表[]。你知道吗
如何运行上述查询并在一个列表中获得所有结果? 谢谢
可以这样做,但所有零件类都必须从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属性,用于命名继承继承结构中的每个类。然后在检索实体时,将实例化正确的子类。你知道吗
classes
另一个潜在的缺点是,存储模型中的属性名是所有子类的联合,如果您对任何属性都有默认值的话。我还没查清楚这有多远。因此,如果在所有子类中都有许多非常不同的属性,则可能会存储许多空属性,并导致在每个实体中存储所有属性名的成本。你知道吗
数据存储没有继承的概念,也不知道您的实体类型是从Part派生的。你知道吗
对于GAE,实际上没有任何方法可以做到这一点:祖先键并不是真正的答案,因为它们将拥有所有电机/电池实体,从单个部件降下来,这将严重限制更新率。你知道吗
对这种关系建模的最佳方法实际上是删除单独的模型,使用一个part_type字段,该字段可以是"motor"或"battery"。你知道吗
part_type
"motor"
"battery"
可以这样做,但所有零件类都必须从PolyModel继承
https://developers.google.com/appengine/docs/python/ndb/polymodelclass
所以呢
但是,所有项都作为一部分存储在数据存储中,它们有一个附加的
classes
属性,用于命名继承继承结构中的每个类。然后在检索实体时,将实例化正确的子类。你知道吗另一个潜在的缺点是,存储模型中的属性名是所有子类的联合,如果您对任何属性都有默认值的话。我还没查清楚这有多远。因此,如果在所有子类中都有许多非常不同的属性,则可能会存储许多空属性,并导致在每个实体中存储所有属性名的成本。你知道吗
数据存储没有继承的概念,也不知道您的实体类型是从Part派生的。你知道吗
对于GAE,实际上没有任何方法可以做到这一点:祖先键并不是真正的答案,因为它们将拥有所有电机/电池实体,从单个部件降下来,这将严重限制更新率。你知道吗
对这种关系建模的最佳方法实际上是删除单独的模型,使用一个
part_type
字段,该字段可以是"motor"
或"battery"
。你知道吗相关问题 更多 >
编程相关推荐