Flask 如何在炼金术中使用count()

Flask 如何在炼金术中使用count(),flask,flask-sqlalchemy,Flask,Flask Sqlalchemy,我正在协助一个使用flask sqlalchemy的项目。我想要一个db查询来计算表中的记录数。我可以直接使用table.query.filter_by(condition).count()吗?或者我需要添加什么。请协助我。我是初学者。提前感谢 是的,就是这个。但请记住,“count()”会再进行一次查询,如下所示: Select count(q.*) from (select * from table) q Select count(table.id) from table db.sess

我正在协助一个使用flask sqlalchemy的项目。我想要一个db查询来计算表中的记录数。我可以直接使用table.query.filter_by(condition).count()吗?或者我需要添加什么。请协助我。我是初学者。提前感谢

是的,就是这个。但请记住,“count()”会再进行一次查询,如下所示:

Select count(q.*) from (select * from table) q
Select count(table.id) from table
db.session.execute(Table.query.filter_by(condition).statement.with_only_columns([func.count()]).order_by(None)).scalar()
这不是优化。您可以使用以下选项:

from sqlalchemy.sql.functions import func
number = session.query(func.count(table.id).label('number').first().number
SQL查询如下所示:

Select count(q.*) from (select * from table) q
Select count(table.id) from table
db.session.execute(Table.query.filter_by(condition).statement.with_only_columns([func.count()]).order_by(None)).scalar()
根据,以下内容适用于您:

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

Class\u name是表的映射类的名称。

给出的答案中没有一个是专门针对Alchemy的,您将使用您给出的示例:

Table.query.filter_by(condition).count()
您可以在不使用筛选器的情况下执行
.count()

Table.query.count()
您还可以使用M2M关系进行计数:

ParentTable.children.count()
您可以在jinja模板中直接使用其中任何一个,如:

{{ Table.query.filter_by(condition).count() }}
奖励积分(针对注重绩效的员工):

.count()
有点慢(特别是对于MySQL,由于子查询处理不当),因此可以使用如下自定义计数:

Select count(q.*) from (select * from table) q
Select count(table.id) from table
db.session.execute(Table.query.filter_by(condition).statement.with_only_columns([func.count()]).order_by(None)).scalar()
假设
db
是您的SQLAlchemy实例(即
db=SQLAlchemy(app)
)。虽然很简单,但它会为您节省一点大查询的开销。

简单是最好的:

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

这是真正的答案,并提供了一个关于jinja模板的极好示例。谢谢不要使用.count with Postgres:
Table.query.filter\u by(条件)。count()
生成:
选择count(*)作为count\u 1 FROM(选择Table.field1,Table.field2,…Table.fieldN WHERE condition)作为Postgres中的anon\u 1
count
(因为MVC postgres不保留表的行计数),但在子查询中这样做会定期触发最坏情况。还要注意SQL Alchemy如何获取表中的每一行以传递给count…最好使用:
db.session.query(db.func.count()).filter(condition).scalar()
OP特别询问如何使用ORM而不是原始SQL