首页 > 解决方案 > 结合2个sqlalchemy查询和排序

问题描述

我正在使用一个查询的结果来处理另一个查询,然后将该数据添加到原始查询对象中。然后,我想按该数据排序结果。

这是我目前所拥有的:

def driver():
    sess = session()
    data = sess.query(DriversConstructors).filter(DriversConstructors.TYPE_ID==1).all()
    for driver in data:
        p = sess.query(func.sum(FantasyResults.POINTS)).filter(FantasyResults.DRIVER_CONSTRUCTOR_ID==driver._ID).scalar()
        driver.points = int(p)
    sess.close()
    return data

所以基本上结果需要按点排序。

我非常有信心有更好的方法来做到这一点,所以任何帮助都将不胜感激。

标签: pythonsqlalchemy

解决方案


如果我理解正确,您需要的是 JOIN 和一些分组,以便将操作移动到数据库系统:

def driver(type_id=1):
    sess = session()
    try:
        return sess.query(DriversConstructors).\
            outerjoin(FantasyResults,
                      FantasyResults.DRIVER_CONSTRUCTOR_ID == DriversConstructors._ID). \
            filter(DriversConstructors.TYPE_ID == type_id). \
            group_by(DriversConstructors._ID). \
            order_by(func.sum(FantasyResults.POINTS)). \
            all()

    finally:
        sess.close()

推荐阅读