4

我希望构建一个类似这样的查询

我会有2个模型A,B

B 与 A 具有多对一的关系(一个 A 有多个 B)。

我希望我的查询返回类似这样的内容 [(A, [B, B, B]), (A, [B, B]), etc...]

其中元组的第一个元素是 A 类,第二个是与 A 类有关系的所有 B 元素的列表(或查询)。

我曾尝试使用 group_by ,但结果却是 [(A, B), (A, B), (A, B), ...]

注意:我不想简单地遍历所有 a,然后查询 B,因为 A 可能没有 B。我想做的是

*  filter all B's by a datestamp
-> group those B's by A
-> return an iterable object tuples as described above

有没有办法在 SQL 语句中完成这一切?我发现像 func.count 一样,如果我想计算每个 A 有多少 B,它会起作用,但我需要遍历 B。

4

1 回答 1

2

不,您无法通过简单地使用group_by. 最好使用普通的 python 来完成:

from sqlalchemy.orm import joinedload
from collections import defaultdict

def handle_request(datestamp):
    """ Return dict(A, [Bs]) for Bs filtered by *datestamp*.  """
    qry = session.query(B).options(joinedload(B.A)).filter(B.datestamp > datestamp)
    res = defaultdict(list)
    for b in qry:
        res[b.A].append(b)
    res = dict(res)
    return res

datestamp = datetime.datetime(2001, 1, 1)
res = handle_request(datestamp)
for a, bs in res.items():
    print a, bs
于 2013-04-26T08:13:01.813 回答