如何使用SQLAlchemy当前支持的ORM API统计唯一行?
SQLAlchemy 2.0+ ORM 统计唯一行数量的正确写法
针对你用旧Query API的self.session.query(table).distinct().count()统计唯一行的需求,以下是SQLAlchemy 2.0+受支持的ORM实现方式:
场景1:统计整行去重后的总数(与旧API行为完全一致)
如果需要对整个表的行进行去重后统计数量,正确写法需将去重查询转为子查询:
from sqlalchemy import select, func count = self.session.scalar( select(func.count()) .select_from(select(table).distinct().subquery()) )
你之前尝试的代码未正常工作,大概率是缺少.subquery()显式将去重查询转为子查询,部分数据库驱动需要明确的子查询结构才能正确解析。
如果你的ORM模型对应的数据表有主键(比如id列),也可以通过统计主键的唯一值数量达到相同效果,这种写法性能通常更优:
count = self.session.scalar( select(func.count(func.distinct(table.id))) )
场景2:统计特定列的唯一值数量
如果只需要统计某一列的唯一值数量,直接使用func.count(func.distinct(列名))即可:
count = self.session.scalar( select(func.count(func.distinct(table.column_name))) )
内容的提问来源于stack exchange,提问作者Ginko
相关产品推荐
相关产品推荐

