gpt4 book ai didi

python - SQLAlchemy Group By 具有完整的子对象

转载 作者:太空狗 更新时间:2023-10-29 21:35:55 27 4
gpt4 key购买 nike

想象一下下面的 Media 表:

| site       | show_id | time |
| ---------------------|-------|
| CNN | 1 | 'a' |
| ABC | 2 | 'b' |
| ABC | 5 | 'c' |
| CNN | 3 | 'd' |
| NBC | 4 | 'e' |
| NBC | 5 | 'f' |
--------------------------------

我想遍历按 show_id 分组的查询结果并试过这个查询:

listings = session.query(Media).filter(Media.site == "CNN").group_by(Media.show_id).all()

下面是我希望如何迭代结果:

for showtimes in listings:
for show in showtimes:
print(show.time)

但是那个查询并没有给我所有分组的子对象。我错过了什么?

最佳答案

在 SQL 中,GROUP BY 子句根据分组表达式将分组的行压缩为一行。我的猜测是您使用的是 SQLite 或旧版本的 MySQL,因为您可以选择非聚合而不是 functionally dependent。关于分组表达式。在这种情况下,结果包含来自每组未指定行的值,这很少(如果有的话)有用。

解决方案是在 SQL 中使用 ORDER BY 而不是 GROUP BY 然后 group in Python基于顺序表达式:

from itertools import groupby
from operator import attrgetter

listings = session.query(Media).\
filter(Media.site == "CNN").\
order_by(Media.show_id).\
all()

# Materialize the subiterators to lists
listings = [list(g) for k, g in groupby(listings, attrgetter('show_id'))]

关于python - SQLAlchemy Group By 具有完整的子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52731361/

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