在 SQL-Alchemy 中选择父母数据和孩子计数

gbe*_*ger 5 python sql sqlalchemy flask-sqlalchemy

我有一个父表和一个子表。这是一种一对多的关系:父母可以有多个孩子,孩子只能有一个父母。

我正在尝试在 SQLAlchemy 中创建一个查询,该查询将为我提供所有父母的数据以及他们的孩子的数量。

到目前为止我有这个:

db.session.query(func.count(models.Child.id), models.Parent)\
  .select_from(models.Parent).join(models.Child).group_by(models.Parent.id)
Run Code Online (Sandbox Code Playgroud)

这将产生如下 SQL:

SELECT count(child.id) AS count_1, parent.id AS parent_id, parent.name AS parent_name
FROM parent 
INNER JOIN child ON parent.id = child.parent_id
Run Code Online (Sandbox Code Playgroud)

这给了我想要的结果,除非父母没有孩子。然后,该父级就从结果中完全省略,而所需的结果是有一行包含其 id、名称和 0 计数。

gbe*_*ger 4

这称为外连接。

在 SQLAlchemy 中,使用outerjoin方法而不是join,您将获得所需的结果。