Sqlalchemy:过滤关系中应该有多少个实例

Posted

技术标签:

【中文标题】Sqlalchemy:过滤关系中应该有多少个实例【英文标题】:Sqlalchemy: Filter how many instances there should be in a relationship 【发布时间】:2021-07-13 19:50:09 【问题描述】:

如果您想根据其中一个关系的长度(关系中存在的行数)过滤表,您会怎么做? 我希望过滤器语句的功能如下:

Table.query.filter(Table.relationship.length == relationship_length)

这是一个应用示例:

Family.query.filter(Family.children.length == amount_of_children)

正如 Tim Roberts 所说,使用纯 SQL 的方法是:

GROUP BY familyid HAVING count(*) > length

如果sqlalchemy中没有这个功能,那怎么办呢?

【问题讨论】:

那么,您是说某处有一个带有家庭 ID 的“Person”表,并且您想知道哪些家庭 ID 的行数超过 N? 是的。我想返回有特定数量孩子的家庭。 在 SQL 中,这将是对 Person 表 GROUP BY familyid HAVING count(*) > length 的分组查询。我不确定如何在 SqlAlchemy 中表达。 【参考方案1】:

正如 Tim Roberts 所说,使用纯 SQL 的方法是:

GROUP BY tableid HAVING count(*) > length

在 sqlalchemy 中,会这样写:

from sqlalchemy import func
Table.query.join(Table.relationship).group_by(Table.id).having(func.count() == relationship_length)

例如,搜索一个有特定数量孩子的家庭:

from sqlalchemy import func
Family.query.join(Family.children).group_by(Family.id).having(func.count()==amount_of_children)

【讨论】:

以上是关于Sqlalchemy:过滤关系中应该有多少个实例的主要内容,如果未能解决你的问题,请参考以下文章

如何将自动过滤器添加到与 SQLAlchemy 的关系中?

Flask SQLAlchemy查询:从自己的外键关系中过滤记录

您如何设置 sqlalchemy 关系ihp,以便子查询负载将根据属性过滤我们的结果

SqlAlchemy - 按关系属性过滤

如何禁用分离实例关系上的 SQLAlchemy 延迟加载?

Flask--SQLAlchemy--基本查询备忘