Flask SQLAlchemy sum函数比较

时间:2017-11-14 12:48:18

标签: python sqlalchemy flask-sqlalchemy

我有一张表,其中包含有关用户的一些数据。 likesmile有两个字段。我需要从表中获取数据,按user_id分组,以显示用户是否喜欢或微笑。我将用SQL编写的查询如下:

select sum(smile) > 0 as has_smile,
       sum(like) > 0 as has_like,
       user_id
from ratings
group by user_id.

这将提供如下输出:

| has_smile | has_like | user_id |
+-----------+----------+---------+
|         1 |        0 |       1 |
|         1 |        1 |       2 |

是否有可能将此查询转换为SQLAlchemy(准确地说是Flask-SQLAlchemy)?我知道有db.func.sum但我不知道如何在那里添加比较,并且有标签。我现在做的是:

cls.query.with_entities("user_id").group_by(user_id).\
    add_columns(db.func.sum(cls.smile).label("has_smile"),
                db.func.sum(cls.like).label("has_like")).all()

但如果存在或没有微笑/喜欢,那将返回确切的微笑/喜欢数量,而不仅仅是1/0

1 个答案:

答案 0 :(得分:2)

感谢运算符重载,你可以像以前一样用Python做比较:

db.func.sum(cls.smile) > 0

生成一个SQL表达式对象,然后可以给它一个标签:

(db.func.sum(cls.smile) > 0).label('has_smile')