読者です 読者をやめる 読者になる 読者になる

SQLAlchemy のサブクエリ

サブクエリのフィールドが見つからないといわれてちょっとハマった。

複数のカゴの中にりんごが複数入っているとする。
すべてのカゴに入っているりんごの総数を集計するサブクエリは以下のように書ける。

りんごのID (apple_id) と総数 (total) をフィールドとしてもたせる。

apple_in_bucket = session.query(
    AppleInBucket.apple_id,
    func.sum(AppleInBucket.count).label("total")
).group_by(
    AppleInBucket.apple_id
).subquery()

この時、apple_in_bucket.apple_idとしてもAttributeErrorを吐く。
サブクエリのフィールドにアクセスするには、cというフィールドを経由する必要がある。
(c はcolumnsの略らしい。もっといいインターフェイスはなかったのだろうか。)
apple_in_bucket.c.totalでりんごの総数をめでたく取得できる。