我在一个不支持子选择的数据库中使用sqlalchemy。这意味着像这样的东西不会工作(其中Calendar
是继承声明性基的模型):
Calendar.query.filter(uuid=uuid).count()
我试图用这样的东西覆盖count
方法:
def count(self):
col = func.count(literal_column("'uuid'"))
return self.from_self(col).scalar()
但是,from_self
位仍然执行子选择。我不能这样做:
session.query(sql.func.count(Calendar.uuid)).scalar()
因为我想要Query
的所有过滤信息。是否有一种方法,我可以得到当前Query
的过滤器参数,而不做子选择?
谢谢~
来自SQLAlchemy文档:
对于要计数的特定列的细粒度控制,要跳过子查询的使用或以其他方式控制FROM子句,或使用其他聚合函数,请将func表达式与query()结合使用,即:
from sqlalchemy import func
# count User records, without
# using a subquery.
session.query(func.count(User.id))
# return count of user "id" grouped
# by "name"
session.query(func.count(User.id)).
group_by(User.name)
from sqlalchemy import distinct
# count distinct "name" values
session.query(func.count(distinct(User.name)))
来源:SQLAlchemy (SQLAlchemy .orm.query. query. count)