如何在Flask-sqlalchemy中使用count()

时间:2016-01-09 10:54:26

标签: flask flask-sqlalchemy

我正在协助一个使用flask-sqlalchemy的项目。我想要一个db查询来计算表中的记录数。可以直接使用table.query.filter_by(condition).count()或者是否有任何内容我需要补充一下。请帮助我。我是个乞丐。谢谢你!

4 个答案:

答案 0 :(得分:11)

根据this source,以下内容适用于您:

session.query(Class_name).filter_by(condition).count()

Class_name是表的映射类的名称。

答案 1 :(得分:6)

给出的答案都没有专门针对 flask-sqlalchemy ,在此您将完全使用给出的示例:

Table.query.filter_by(condition).count()

您可以在没有过滤器的情况下执行.count()

Table.count()

您还可以使用M2M关系进行计数:

ParentTable.children.count()

您可以直接在jinja模板中使用其中任何一个,例如:

{{ Table.query.filter_by(condition).count() }}

奖励积分(对于注重表现的人):

.count()有点慢(尤其是在MySQL中,由于对子查询的处理不善),因此,您可以使用如下所示的自定义计数:

db.session.execute(Table.query.filter_by(condition).statement.with_only_columns([func.count()]).order_by(None)).scalar()

假设db是您的SQLAlchemy实例(即db = SQLAlchemy(app))。这很麻烦,但是可以节省一些大查询的开销。

答案 2 :(得分:5)

是的,就是这样。但请记住,那是' count()'再做一个查询,如下所示:

Select count(q.*) from (select * from table) q

这不是优化。你可以用这个:

from sqlalchemy.sql.functions import func
number = session.query(func.count(table.id).label('number').first().number

SQL查询将如下所示:

Select count(table.id) from table

答案 3 :(得分:-1)

简单最好:

accounts = db.session.execute('select count(id) as c from user').scalar()