Python中Flask-SQLAlchemy的group_by用法问题请教
各位大神,菜鸟一枚 我有一个文章表 模型是
class Post(db.Model):
__tablename__ = 'post'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(32), unique=True)
body = db.Column(db.Text)
author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
category_id = db.Column(db.Integer, db.ForeignKey('category.id'))
有一个分类表 模型是
class Category(db.Model):
__tablename__ = 'category'
id = db.Column(db.Integer, primary_key=True)
posts = db.relationship('Post', backref='postcategory', lazy='dynamic')
categoryName = db.Column(db.String(32), unique=True, index=True)
我想查出category 文章分类每个分类有多少篇文章
我有 sql 能查,语句是
SELECT COUNT(id),(SELECT categoryName from category WHERE post.category_id=category.id) as N FROM post GROUP BY category_id
请教一下各位大神,如果用 flask-sqlalchemy 怎么写呀 谢谢各位了
Python中Flask-SQLAlchemy的group_by用法问题请教
💪
Flask-SQLAlchemy的group_by用法和原生SQLAlchemy基本一致,主要用在查询时对结果进行分组。常见问题通常出在分组后选择字段上。下面给几个典型场景的代码示例。
场景1:简单计数分组 比如按用户类别统计数量:
from models import User
from sqlalchemy import func
result = db.session.query(
User.category,
func.count(User.id).label('count')
).group_by(User.category).all()
# 返回格式:[('category1', 5), ('category2', 3)]
场景2:分组后聚合计算 按日期分组计算平均值:
from models import Order
from sqlalchemy import func, Date
result = db.session.query(
func.date(Order.created_at).label('date'),
func.avg(Order.amount).label('avg_amount')
).group_by(func.date(Order.created_at)).all()
场景3:多字段分组 按部门和职位统计:
result = db.session.query(
Employee.department,
Employee.position,
func.count(Employee.id)
).group_by(Employee.department, Employee.position).all()
关键点:
- 使用
func.count()、func.sum()等聚合函数 group_by()中的字段必须是查询的字段(除非使用MySQL的宽松模式)- 可以用
label()给聚合结果起别名方便访问
常见错误处理:
如果遇到"SELECT list is not in GROUP BY clause"错误,要么把所有非聚合字段都加到group_by()中,要么使用聚合函数处理这些字段。
总结:按需选择分组字段,配合聚合函数使用。
可以试试这个:python<br>from sqlalchemy import func<br> db.session.query(func.count(<a target="_blank" href="http://Post.id" rel="nofollow noopener">Post.id</a>), Category.categoryName).select_from(Category).\<br> join(Post, <a target="_blank" href="http://Category.id" rel="nofollow noopener">Category.id</a> == Post.category_id).group_by(Post.category_id).all()<br>
谢谢您,我等下回家测试一下,谢谢您帮助我
谢谢您,,。。原来我查资料,关键字全是 flask-sqlalchemy .原来用 sqlalchemy 就可以完成。谢谢您
解决了就好,不客气

