我成功地在两个层面上使用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)
)
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)
会重置查询的排序方式,但这与计数无关。
使用此方法,您可以在任何ORM查询上使用 count(*)
,它将遵守已指定的所有filter
和join
条件。
table
是Table
、mapper
还是Base
的实例? - wberry