python - 结合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
所以基本上结果需要按点排序。
我非常有信心有更好的方法来做到这一点,所以任何帮助都将不胜感激。
解决方案
如果我理解正确,您需要的是 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()
推荐阅读
- node.js - 我正在使用 Oauth 进行 google 身份验证并获取 client-id 和 client_secret 但它显示未定义
- android - Fetch 函数导致 SQL Transient 服务器行为异常
- flutter - 类似 Whatsapp 的搜索图标,点击时覆盖标题但在正文中 - 使用 Flutter
- excel - 从单元格引用转换为命名范围
- c++ - 为什么 mutiset 不像 set
- scala - scala中的复合类型与mixins
- linux - Visual Studio Code 通过脚本触发热部署
- python-3.x - Django Rest 框架过滤器的问题
- teamcity - GitVersion 在 TeamCity 构建中引发身份验证错误
- node.js - 无法在非异步问题中使用的等待错误