備忘録
SELECT側のカラムとしてサブクエリで情報を引っ張りたい時は、サブクエリを別のクエリとして設定する必要がある。
subquery.py
sub_query_sum = local_session.query(func.count(Posts.slack_channel_id))\
.filter(Posts.slack_ws_id== Channels.slack_ws_id,Posts.slack_channel_id == Channels.slack_channel_id_from,Posts.created_date>=start_this_month,Posts.created_date<=end_this_month)\
.group_by(Posts.slack_channel_id)\
.label('post_count')
複数項目を返そうとしたらエラーになったので、サブクエリで返せるのは一つのみっぽい(調べてないが
filter部分で、メインクエリのテーブルと比較するように書いておく
mainquery.py
custom_channels = local_session.query(Channels.slack_channel_id,Channels.slack_channel_id_from,Channels.created_by_slack_userid,sub_query_sum)\
.filter_by(slack_ws_id=slack_ws_id)\
.filter(Channels.slack_channel_id_from.isnot(None))\
.order_by(sub_query_sum.desc())\
.all()
先程のサブクエリをメインのSELECT部分に追加すればOK。ここは特に迷うことは無いと思う。
サブクエリの内容はlabel名を指定すれば良いのでこんな形にすれば取得することができる
for custom_channel in custom_channels:
print(custom_channel.post_count)
クエリ間違ってないのにデータ取得出来ないのはなぜだ!?と思って1hくらい溶かしましたが、よくよく見たらとってこようと思っていたデータが存在していませんでした。みなさん気をつけましょう。