我正在使用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
的过滤器参数?
感谢〜
答案 0 :(得分:1)
从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)))