2016-08-04 10 views
0

言う任意の行がある場合は、それぞれのユーザーのいずれか、「チーム」または「会社」SQLAlchemyの - 私の目標は、私は2つのテーブルを持っていることをどのようにユニオンクエリからのカウントを選択するために

との間の関係を記述useridのテーブルに "admin"と書かれていれば、そのことを知りたいです。それ以外の場合は、それも知っておく必要があります。

私がこれまで持っていたことは、次のとおりです(UserTeamLinkとUserCompanyLink)はOrmタブです。

AttributeError: 'BaseQuery' object has no attribute 'c' 
:を有するしかし

obj = UserTeamLink 
q1 = session.query(func.count(obj.type).label("cnt")).filter(obj.type == 'admin').filter(obj.user_id == id) ; str(q1) ; q1.all() 
obj = UserCompanyLink 
q2 = session.query(func.count(obj.type).label("cnt")).filter(obj.type == 'admin').filter(obj.user_id == id) ; str(q2) ; q2.all() 

my_union = q1.union_all(q2) 
query = select([func.sum(my_union.c.cnt).label("total_cnt")], from_obj=my_union) 
query.all() 

、ライン "クエリ=選択([func.sum(my_union.c.cnt).LABEL(" total_cnt ")]、from_obj = my_union)" 休憩

全体の出力は次のとおりです。

>>> obj = UserTeamLink 
>>> q1 = session.query(func.count(obj.type).label("cnt")).filter(obj.type == 'admin').filter(obj.user_id == id) ; str(q1) ; q1.all() 
'SELECT count(user_team.type) AS cnt \nFROM user_team \nWHERE user_team.type = :type_1 AND user_team.user_id = :user_id_1' 
[(0L,)] 
>>> obj = UserCompanyLink 
>>> q2 = session.query(func.count(obj.type).label("cnt")).filter(obj.type == 'admin').filter(obj.user_id == id) ; str(q2) ; q2.all() 
'SELECT count(user_company.type) AS cnt \nFROM user_company \nWHERE user_company.type = :type_1 AND user_company.user_id = :user_id_1' 
[(0L,)] 
>>> 
>>> my_union = q1.union_all(q2) 
>>> query = select([func.sum(my_union.c.cnt).label("total_cnt")], from_obj=my_union) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'BaseQuery' object has no attribute 'c' 

は、この問題を解決する方法はありますか?

要約すると、私がしようとしているのは、両方のテーブルからカウントを選択し、別のテーブルに結合してから追加することです。

ありがとうございます。私は両方が動作するはずだと思うしかし、あなたは、サブクエリ

my_union = q1.union_all(q2).subquery() 
query = select([func.sum(my_union.c.cnt).label("total_cnt")], from_obj=my_union) 

答えて

0

は、ここに私自身の問題解決だ、私は、@ RMN年代よりもわずかに異なるアプローチを使用:

q_union = q1.union_all(q2) 
    q_union_cnt = db.session.query(func.sum(q_union.subquery().columns.cnt).label("total_cnt")) 
    admin_points = q_union_cnt.scalar() 
+0

ありがとうございました!これは実際に私が巻き終わったものです: '' ' q_union = q1.union_all(q2) q_union_cnt = db.session.query(func.sum(q_union.subquery()。columns.cnt).label("合計)」) admin_points = q_union_cnt.scalar() '' ' –

0

としてmy_unionを使用する必要が

関連する問題