時間がないので、ざっとメモ。
背景: PostgreSQL の array_agg は配列として集約する集約関数
こんな感じでユーザ user_id
の通った学校の一覧 (school
列を配列にしたもの) を返すことができる。
select user_id, array_agg(school) as schools
from ...
where ...
group by user_id
これを psycopg2 で単純に受け取ろうとすると、{'foo','bar'}
のような配列の文字列表現が得られる。
問題: これを psycopg2 でリストとして受け取るには?
Python で扱うならリストとして受け取りたい。
解決策: クエリに型をつければいい
クエリには型がつけられる。配列であれば <要素の型>[]
とすればいい。
たとえば前述の school
列の型が varchar(...)
なのであれば、クエリをこうすればいい:
select user_id, array_agg(school)::varchar[] as schools
from ...
where ...
group by user_id
これで schools
列の値は Python のリストとして受け取れる。嬉しい。
(以上)