我希望构建一个类似这样的查询
我会有2个型号A,B
B与A有很多对一的关系(有很多B到一个A).
我希望我的查询返回类似这样的东西[(A,[B,B,B]),(A,[B,B])等…]
其中元组的第一个元素是A类,第二个元素是与A类有关系的所有B元素的列表(或查询).
我曾试图使用group_by但它最终只是[(A,B),(A,B),(A,B),…]
注意:我不想简单地迭代所有的,然后查询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的.
最佳答案 不,你不能通过简单地使用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