我有一张表,其中包含有关用户的一些数据。 like
和smile
有两个字段。我需要从表中获取数据,按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
。
答案 0 :(得分:2)
感谢运算符重载,你可以像以前一样用Python做比较:
db.func.sum(cls.smile) > 0
生成一个SQL表达式对象,然后可以给它一个标签:
(db.func.sum(cls.smile) > 0).label('has_smile')