使用sqlalchemy从多个表中选择列并联接
我正在尝试使用使用sqlalchemy从多个表中选择列并联接,sqlalchemy,Sqlalchemy,我正在尝试使用select语句在sqlalchemy中做一些我认为应该很简单的事情。基本上,我有两个表,我想从中选择一些列,并与一个GROUPBY进行左外连接。在SQL中,这看起来像这样: SELECT t1.id, t1.name, count(t2.id) as child_count FROM parent t1 LEFT OUTER JOIN child t2 ON t1.id = t2.parent_id GROUP BY t1.id, t1.name; 在sqlal
select
语句在sqlalchemy中做一些我认为应该很简单的事情。基本上,我有两个表,我想从中选择一些列,并与一个GROUPBY进行左外连接。在SQL中,这看起来像这样:
SELECT
t1.id,
t1.name,
count(t2.id) as child_count
FROM parent t1
LEFT OUTER JOIN child t2
ON t1.id = t2.parent_id
GROUP BY t1.id, t1.name;
在sqlalchemy中,我可以做一些接近的事情,但这样做并不完全正确:
sqlalchemy.select(
t1.id,
t1.name,
sqlalchemy.func.count(t2.id)
).where(
t1.id==t2.parent_id
).group_by(
t1.id, t1.name
)
然而,当我开始使用.join
或.outerjoin
时,它似乎变得很混乱,我似乎不知道怎么做
有什么指导吗?似乎我遗漏了一些明显的东西。如何使用
.join
和.outerjoin
?我尝试了几种不同的方法。但是有一个问题是,.join
似乎想要一个表的引用,这意味着我不能在原始的select列中包含被联接表中的列,并且联接随后包含了内部表中的所有列。其他结构导致我遇到这个问题:t1
和t2
是别名映射类,还是它们是Table
实例或别名?不使用.c
名称空间将暗示前者。你读过吗?它们是表
实例。我已经读过了,但是解决方案展示了我提到的一些问题(例如,它包括联接中Table2
的所有列,而不仅仅是其中一列),您所说的“它包括联接中Table2
的所有列”是什么意思?链接Q/A中的查询从表2
中选择0列,在ON子句中使用1列,在WHERE中使用另一列。如果你在问题本身中加入你的实际尝试或尝试,除了你已经介绍的前ANSI连接,这仍然会有帮助。还要注意的是,select()
需要一个项目列表作为第一个位置参数,而不是项目作为参数。