【发布时间】:2017-05-05 09:54:44
【问题描述】:
使用 SQLAlchemy,我想从子查询 sq_objects 重现可用的 aggregate function jsonb_object_agg:
from sqlalchemy import select, func
s = select([
sq_objects.c.object_id,
func.jsonb_object_agg(
sq_objects.c.keys, sq_objects.c.values).over(
partition_by=sq_objects.c.object_id).label("attributes"),
]).\
distinct(sq_objects.c.object_id)
但是,执行返回:
(psycopg2.ProgrammingError) 无法适应类型“方法”
[ SQL: "SELECT DISTINCT ON (sq_objects.object_id)
sq_objects.object_id,
jsonb_object_agg(
%(jsonb_object_agg_1)s,
%(jsonb_object_agg_2)s
) OVER (PARTITION BY sq_objects.object_id) AS attributes
FROM (SELECT ... ) AS sq_objects"
] [
parameters: {'jsonb_object_agg_1': <bound method Properties.keys of <sqlalchemy.sql.base.ImmutableColumnCollection object at 0x7f0ffb7aa828>>,
'jsonb_object_agg_2': <bound method Properties.values of <sqlalchemy.sql.base.ImmutableColumnCollection object at 0x7f0ffb7aa828>>}]
这是我要复现的sql代码:
SELECT DISTINCT ON (sq_objects.object_id)
sq_objects.object_id,
jsonb_object_agg(
sq_objects.keys,
sq_objects.values
) OVER (PARTITION BY sq_objects.object_id) AS attributes
FROM (SELECT ... ) AS sq_objects
【问题讨论】:
标签: postgresql sqlalchemy