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:过滤关系中应该有多少个实例的主要内容,如果未能解决你的问题,请参考以下文章
Flask SQLAlchemy查询:从自己的外键关系中过滤记录