SQLAlchemy - 在查询eager_load中为关系添加不同的order_by条件

时间:2017-06-26 11:08:43

标签: python orm sqlalchemy relationship flask-sqlalchemy

我有一个模型和一个为模型本身定义的关系(Parent-Child)。有一个order_by属性设置为模型中的关系。如下所示:

from app import db

class ModelA(db.Model):
   __tablename__ = 'activities'
   id = db.Column(db.Integer, primary_key=True)
   startdate = db.Column(db.Date())
   sort_id = db.Column(db.Integer)
   parent_id = db.Column(db.Integer, db.ForeignKey('activities.id'))
   children = db.relationship("ModelA", cascade="all,delete-orphan", backref=db.backref('parent', remote_side=[id]),order_by='ModelA.sort_id')

现在,我有查询来获取ModelA中的所有记录及其子项eagerloaded。唯一的问题是,在此特定查询中,必须根据startdate而不是sort_id对子项进行排序。查询如下:

a_alias = aliased(ModelA)
activities = ModelA.query.outerjoin(a_alias, ModelA.children).options(
                     contains_eager(ModelA.children, alias=a_alias)).filter(ModelA.projectId == project_id).\
                     order_by(nullsfirst(ModelA.parent_id), ModelA.startdate, a_alias.startdate).all()

但是,这个查询不会排序急切加载startdate的子关系。它仍然基于模型中定义的sort_id进行排序。我该怎么做才能克服这个问题?

0 个答案:

没有答案