我正在协助一个使用flask-sqlalchemy的项目.我想要一个db查询来计算表中的记录数.可以直接使用table.query.filter_by(condition).count()或者我需要什么加.请帮助我.我是个乞丐.谢谢!
根据此来源,以下内容适合您:
session.query(Class_name).filter_by(condition).count()
Class_name是表的映射类的名称.
给定的答案都没有专门针对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)
)。这很麻烦,但是可以节省一些大查询的开销。
是的,就是这样。但是请记住,“ 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