首页 > 解决方案 > 使用过滤器获取字段总和

问题描述

AllNews        Article 
 ------       -----------
|id    | --> | article_id|
 ------       -----------
| date |     | views     |
 ------       -----------
             | id        |
              -----------

我想要的只是在每个日期的两个日期之间获取所有文章的浏览量总和

articles = []
all_news = AllNews.query.filter(AllNews.date.between(date1, date2)).all()
for i in all_news:
    articles += Article.query.filter_by(article_id=i.id).all()

不知道这之后该怎么办。如何按日期过滤文章并获取每个日期的浏览量总和?

标签: sqlalchemyflask-sqlalchemy

解决方案


首先,在 SQL 中考虑一下。那将是一个简单的连接,例如

SELECT AllNews.id, SUM(Article.views) FROM AllNews, Article WHERE
AllNews.id = Article.article_id GROUP BY AllNews.id

对?

现在,我对 flask-sqlalchemy 不熟悉,但是从我从文档中收集到的内容中,您会执行以下操作:

from yourapplication import db
q = db.session.query(AllNews.id, func.sum(Article.views)).filter(
    AllNews.id == Article.article_id,
).group_by(AllNews.id)

for (article_id, count) in q:
    pass

推荐阅读