SQLAlchemy - 覆盖没有subselect的数据库的orm.Query.count

时间:2016-08-24 01:21:54

标签: python sqlalchemy crate

我正在使用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的过滤器参数?

感谢〜

1 个答案:

答案 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)))

来源:SQLAlchemy (sqlalchemy.orm.query.Query.count)