【问题标题】:Flask SQLAlchemy sum function comparisonFlask SQLAlchemy sum 函数比较
【发布时间】:2017-11-14 20:57:14
【问题描述】:

我有一个表格,其中包含一些有关用户的数据。 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

【问题讨论】:

    标签: python sqlalchemy flask-sqlalchemy


    【解决方案1】:

    由于运算符重载,您可以像在 Python 中一般使用的方式进行比较:

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

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

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

    【讨论】:

    • 谢谢,我先写了,但 IDE 将其标记为错误,所以没有尝试过:/ 一切正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 2021-01-15
    • 2014-09-20
    • 2021-02-11
    • 2017-11-16
    相关资源
    最近更新 更多