[英]SQLAlchemy complex many to many with abstractions
我们在非常复杂的数据库中拥有这种模式,该模式本质上可以归结为每个边上都有元数据的有向图。 我们正在解决它,但是我敢肯定有一个“更好”的解决方案。 我将尝试通过一个例子来描述这种情况。
这个例子就是我们在一些顶级对象类型上分类缺陷的例子。 这些顶级对象类型是“水果”,“汽车”和“人”。 缺陷也是顶级对象类型,但是有两种形式:审美缺陷和结构缺陷。
因此,例如,汽车可能同时具有美学缺陷和结构缺陷。 重要的是,可以将相同的Structuredefect分配给Car和Fruit。
图中的所有顶级对象都有一个全局唯一ID,该ID映射到一种类型。 我们将顶级表示称为“实体”。
方括号表示表格的主键
实体类型 ->(无orm对象)
实体 -> entity_type_map
对象表示为:
水果 -> FruitsModel
汽车 -> 汽车模型
人 ->人模型
缺陷的表示方式类似:
审美缺陷 -> AesDefectModel(继承自BaseDefectModel)
结构缺陷 -> StructDefectModel(继承自BaseDefectModel)
缺陷按以下方式映射到实体:
缺陷实体图 -> 缺陷实体图
我想做的是说:
class FruitsModel(db.Model):
__tablename__ = "Fruits"
id = db.Column(db.BigInteger, db.ForeignKey("Entities.entity_id"))
# other cols, etc
def print_defects(self):
defects = self.defects
for d in defects:
print d
defects = db.relationship # <--- What goes here ??
为了得到我目前拥有的水果缺陷列表。 对每种缺陷类型执行查询,然后在python中串联两个列表。
建立关系的正确方法是什么,这些关系将使我所有的缺陷成为其基类(BaseDefectModel)或包含混合类型的列表(AesDefectModel和StructDefectModel)? 如果没有关系,是否可以通过一个查询来完成?
作为记录,SQLAlchemy比我完成的大多数机器学习都要复杂。
答案原来是使用多态继承,我刚才才明白。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.