我的声明性类声明如下所示:
class ExportJob(db.Model):
# has foreign key to paramset
backgroundtask = db.relationship(BackgroundTask, backref="exportjob")
params = db.relationship("ParamSet")
class ParamSet(db.Model):
__tablename__ = "paramset"
paramvalues = db.relationship("Param", backref="paramset")
class Param(db.Model):
__tablename__ = "param"
id = db.Column(db.Integer, primary_key=True)
paramset_id = fkey("paramset", index=True)
name = db.Column(db.Unicode(50), nullable=False)
type = db.Column(db.Unicode(10))
__mapper_args__ = {
'polymorphic_on': type
}
class IntegerParam(Param):
__tablename__ = "integerparam"
value = db.Column(db.Integer, nullable=False)
__mapper_args__={
"polymorphic_identity": "int"
}
class BoolParam(Param):
...
class DateParam(Param):
...
class SomeRelatedParam(Param):
__tablename__ = "somerelatedparam"
related_id = db.Column(db.Integer, db.ForeignKey(...))
value = db.relationship(SomeRelatedModelClass)
__mapper_args__ = {...}
我的目标是急切地(使用joinload或子查询加载)一个带有关联的ParamSet的ExportJob和所有类型的所有参数。
我该怎么做?
我试过了:
q = ExportJob.query
q = q.options(subqueryload_all(
ExportJob.params,
ParamSet.paramvalues,
))
但是如何指定急切加载所有不同的Param类型?
答案 0 :(得分:1)
这似乎可以解决问题:
q = ExportJob.query
q = q.options(joinedload_all(
ExportJob.params,
ParamSet.paramsvalues.of_type(with_polymorphic(Param, "*", aliased=True)),
))