我设法在两层上使用 SQLAlchemy 呈现以下 SELECT。
SELECT count(*) AS count_1
FROM "table"
SQL 表达式层的用法
from sqlalchemy import select, func, Integer, Table, Column, MetaData
metadata = MetaData()
table = Table("table", metadata,
Column('primary_key', Integer),
Column('other_column', Integer) # just to illustrate
)
print select([func.count()]).select_from(table)
ORM 层的用法
你只是子类Query
(你可能无论如何)并提供一个专门的count()
方法,比如这个。
from sqlalchemy.sql.expression import func
class BaseQuery(Query):
def count_star(self):
count_query = (self.statement.with_only_columns([func.count()])
.order_by(None))
return self.session.execute(count_query).scalar()
请注意,这会order_by(None)
重置查询的顺序,这与计数无关。
使用此方法,您可以count(*)
在任何 ORM 查询上使用,这将遵守所有已指定的filter
和join
条件。