Python SQLAlchemy Flask筛选器查询以合并两个模型的结果

Python SQLAlchemy Flask筛选器查询以合并两个模型的结果,python,orm,sqlalchemy,flask,flask-sqlalchemy,Python,Orm,Sqlalchemy,Flask,Flask Sqlalchemy,我试图在用户注册日期前订购用户的感谢(帖子) 目前,有两个查询获取两个列表,然后手动合并并重新排序。用户可以是表示感谢的人,也可以是接收者。感谢总是只有一个送礼者,但可能有多个接收者。因此,我有一个感谢和一个感谢的Yuser模型来获得结果 class Thank(db.Model): id = db.Column(db.Integer, primary_key = True) giver_id = db.Column(db.Integer, db.ForeignKey("use

我试图在用户注册日期前订购用户的感谢(帖子)

目前,有两个查询获取两个列表,然后手动合并并重新排序。用户可以是表示感谢的人,也可以是接收者。感谢总是只有一个送礼者,但可能有多个接收者。因此,我有一个感谢和一个感谢的Yuser模型来获得结果

class Thank(db.Model):

    id = db.Column(db.Integer, primary_key = True)
    giver_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable = False)
    status = db.Column(db.SmallInteger, nullable = False) 
    date_registered = db.Column(db.DateTime, nullable = False)

class ThankReceivedByUser(db.Model):

    id = db.Column(db.Integer, primary_key = True)
    thank_id = db.Column(db.Integer, db.ForeignKey("thank.id"), nullable = False)
    receiver_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable = False)
    status = db.Column(db.SmallInteger, nullable = False) 
    date_registered = db.Column(db.DateTime, nullable = False)

如果可能的话,能得到一些关于构造单个查询的提示,那就太好了。

如果我正确理解了您的问题,您希望在单个查询中结合用户给予和收到的感谢。如果是这样的话,您需要两个查询,其中一个选择Gived thanks,而另一个选择received thanks。然后可以对该组合查询的结果进行排序。以下是您的查询的外观:

#user_id包含某个用户id的值。
给定者=db.session.query(谢谢)。过滤者(给定者id=用户id)
received_q=db.session.query(Thank).join(ThankReceivedByUser)\
筛选器(ThankReceivedByUser.receiver\u id==用户\u id)
q=给定联合(已收到)订单人(感谢日期注册)

我想出了这个问题的解决方案:

thanks = Thank.query\ .join(ThanksReceivedByUser)\ .filter(or_(Thank.giver_id == user.id, ThankReceivedByUser.receiver_id == user.id))\ .order_by(Thank.date_registered).all() 谢谢\ .加入(感谢用户接收)\ .filter(或_u)(Thank.giver_id==user.id, ThankReceivedByUser.receiver_id==user.id))\ .订购人(感谢。注册日期)。全部()
你指的是哪两个列表:给予的感谢列表和收到的感谢列表?