使用 SQLAlchemy 过滤 sql 计数(*)

Posted

技术标签:

【中文标题】使用 SQLAlchemy 过滤 sql 计数(*)【英文标题】:Filtering a sql count(*) with SQLAlchemy 【发布时间】:2012-02-10 12:35:15 【问题描述】:

如何使用 SQLAlchemy 执行以下 SQL 查询?

SELECT COUNT (*)
FROM det_factura
WHERE company = 31
  AND date::text LIKE '2011-05% ';

【问题讨论】:

你使用的是什么 SQL 后端? 【参考方案1】:

如果det_factura 也是一个映射对象,那么这个查询应该这样做:

qry = (session.query(func.count(det_factura.id))
        .filter(det_factura.company==31)
        .filter(det_factura.date.like('2010-05%'))
        )

如果是table 实例,下面的应该可以工作:

qry = select([func.count(det_factura.id)],
        and_(det_factura.company==31,
             det_factura.date.like('2010-05%')
            )
        )

【讨论】:

谢谢。我正在使用 SQLSoup,因为我将此代码改编为 sqlsoup。 hmm.. 但是如果您没有 id 字段怎么办?你如何简单地获得“count(*)”,可能在选择列表中存在其他东西(所以你不能使用 sqlalchemy .count())? @shaunc:您总是可以使用func.count('*') 来获得COUNT(*) SQL 表达式。

以上是关于使用 SQLAlchemy 过滤 sql 计数(*)的主要内容,如果未能解决你的问题,请参考以下文章

获取 sqlalchemy 的 upsert 中插入和更新记录的计数

在 SQLAlchemy 中,“过滤器”与“连接和过滤器”语法有啥区别?

在 sqlalchemy python 中构建动态过滤器

sql [sql]使用日期过滤计算1个查询中的多个计数

SQLALchemy动态过滤器_by

SqlAlchemy 用 ORM 截断表