SQLAlchemy Flask filter query to combine results from two models SQLAlchemy Flask filter query to combine results from two models flask flask

SQLAlchemy Flask filter query to combine results from two models


I came up with a solution to this problem:

thanks = Thank.query\    .join(ThanksReceivedByUser)\    .filter(or_(Thank.giver_id == user.id,                 ThankReceivedByUser.receiver_id == user.id))\    .order_by(Thank.date_registered).all()


If I understand your question correctly, you want to combine thanks given and received by a user in a single query. If so, you need to UNION two queries, one of which selects given thanks, while another received ones. Then you can order the results of this combined query. Here's how your query would look like:

# user_id contains a value of some user's id.given_q = db.session.query(Thank).filter_by(giver_id=user_id)received_q = db.session.query(Thank).join(ThankReceivedByUser).\    filter(ThankReceivedByUser.receiver_id == user_id)q = given_q.union(received_q).order_by(Thank.date_registered)