LoginSignup
0
1

More than 1 year has passed since last update.

SQLAlchemy SELECT時のサブクエリの使い方 PostgreSQL

Last updated at Posted at 2022-11-02

備忘録

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くらい溶かしましたが、よくよく見たらとってこようと思っていたデータが存在していませんでした。みなさん気をつけましょう。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1