Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQLAlchemy-将不同的order_by条件添加到查询加载中的关系中_Python_Orm_Sqlalchemy_Relationship_Flask Sqlalchemy - Fatal编程技术网

Python SQLAlchemy-将不同的order_by条件添加到查询加载中的关系中

Python SQLAlchemy-将不同的order_by条件添加到查询加载中的关系中,python,orm,sqlalchemy,relationship,flask-sqlalchemy,Python,Orm,Sqlalchemy,Relationship,Flask Sqlalchemy,我有一个模型和一个定义到模型本身(父-子)的关系。模型中的关系设置了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)

我有一个模型和一个定义到模型本身(父-子)的关系。模型中的关系设置了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中的所有记录,并加载其子记录。唯一的问题是,在这个特定的查询中,必须根据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加载的子关系进行排序。它仍然根据模型中定义的排序id进行排序。我应该怎么做才能克服这个问题?

为什么这个查询如此特殊?你为什么不在其他地方(包括这个地方)手动添加
order_by
?你以前在同一个会话中加载过ModelA对象及其子对象吗?@IljaEveriläGood point。我必须检查它。@AzatIbrakov所有功能都要求根据sort_id对子项进行排序,这就是关系定义属性的原因。但这是一个特例。@IljaEverilä感谢您的评论。问题解决了。这是因为关系是在同一会话中加载的。为什么此查询如此特殊?你为什么不在其他地方(包括这个地方)手动添加
order_by
?你以前在同一个会话中加载过ModelA对象及其子对象吗?@IljaEveriläGood point。我必须检查它。@AzatIbrakov所有功能都要求根据sort_id对子项进行排序,这就是关系定义属性的原因。但这是一个特例。@IljaEverilä感谢您的评论。问题解决了。这是因为关系正在同一会话中加载。