【发布时间】:2010-01-23 22:50:03
【问题描述】:
我是 sqlalchemy 的新手,虽然文档看起来相当详尽,但我找不到完全符合我要求的方法。
假设我有两个表:论坛和帖子。每个论坛都有一个父论坛和任意数量的帖子。我想要的是:
- 顶级论坛列表
- 可通过顶级论坛访问的热切加载的子论坛
- 每个子论坛的帖子计数
所以我开始了:
query(Forum).filter(Forum.parent==None).all()
这为我提供了所有顶级论坛。当然访问子论坛会产生 n 个选择查询。
query(Forum).options(eagerload('children')).filter(Forum.parent==None).all()
这解决了 n 选择问题。
现在我最好的猜测是这样的:
query(Forum, func.count(Forum.children.posts)).options(eagerload('children')).filter(Forum.parent==None).group_by(Forum.children.id).all()
但我得到的只是:
AttributeError: Neither 'InstrumentedAttribute' object nor 'Comparator' object has an attribute 'posts'
我尝试了一些变体,但没有进一步的尝试。为了清楚起见,我正在寻找这个 SQL 的等价物:
select Forum.*, Child.*, count(Post.id)
from Forum
left join Forum Child on Child.parent = Forum.id
left join Message on Message.forum = Child.id
where Forum.parent is null
group by Child.id
【问题讨论】:
标签: python sql sqlalchemy