我希望构建一个类似这样的查询
我会有2个型号A,B
B与A有多对一的关系(A有很多B到A)。
我希望我的查询返回类似这样的东西[(A,[B,B,B]),(A,[B,B])等......]
元组的第一个元素是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的。
答案 0 :(得分: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