gpt4 book ai didi

python - SQLAlchemy 与计数,group_by 和 order_by 使用 ORM

转载 作者:行者123 更新时间:2023-11-28 17:55:18 32 4
gpt4 key购买 nike

我有几个函数需要使用 count()、group_by 和 order_by 进行一对多连接。我正在使用 sqlalchemy.select 函数生成一个查询,该查询将返回一组 id,然后我对其进行迭代以对各个记录进行 ORM 选择。我想知道是否有一种方法可以在单个查询中使用 ORM 来完成我需要做的事情,这样我就可以避免进行迭代。

这是我现在正在做的一个例子。在这种情况下,实体是 Location 和 Guide,一对多映射。我正在尝试获取按相关指南数量排序的热门地点列表。

def popular_world_cities(self):
query = select([locations.c.id, func.count(Guide.location_id).label('count')],
from_obj=[locations, guides],
whereclause="guides.location_id = locations.id AND (locations.type = 'city' OR locations.type = 'custom')",
group_by=[Location.id],
order_by='count desc',
limit=10)
return map(lambda x: meta.Session.query(Location).filter_by(id=x[0]).first(), meta.engine.execute(query).fetchall())

解决方案

我找到了执行此操作的最佳方法。只需提供 from_statement 而不是 filter_by 或类似的东西。像这样:

meta.Session.query(Location).from_statement(query).all()

最佳答案

您尝试做的事情直接映射到子查询 [由您当前的 select 调用生成] 和表之间的 SQLAlchemy 连接。您需要将排序从子选择中移出,并创建一个单独的、带有 count(desc) 标签的列;按该列排序外部选择。

除此之外,我没有看到太多不明显的东西。

关于python - SQLAlchemy 与计数,group_by 和 order_by 使用 ORM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/370174/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com