2017-11-14 4 views
0

ユーザーに関するデータを保持しているテーブルがあります。そこには、likesmileという2つのフィールドがあります。テーブルからデータを取得する必要があります。グループ化されたデータはuser_idで、ユーザーが好きなものか笑顔で表示されます。フラスコSQLAlchemy合計関数の比較

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

(正確にはフラスコSQLAlchemyの)このクエリはSQLAlchemyのに変換することができます任意のチャンスがあります:

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

これは、のような出力を提供します:私はSQLで記述したクエリは次のようになりますか?私は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でやって慣れている道にしてください演算子オーバーロードに

答えて

2

ありがとう:

:あなたは、その後にラベルを付けることができ、SQL式オブジェクトを生成

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

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

ありがとう、私はまずそれを書いたが、IDEはそれを悪いとマークしたので、試していない:/すべて正常に動作している。 – PerunSS

関連する問題