使用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()
需要一个项目列表作为第一个位置参数,而不是项目作为参数。