You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过SQLAlchemy合并PostgreSQL中的JSON数组为单个数组

用SQLAlchemy在PostgreSQL中展开并合并JSON数组

针对你的需求——将每行groups列中的JSON数组元素展开并合并为一个统一的JSON数组,可以借助PostgreSQL的JSON函数配合SQLAlchemy实现,具体步骤如下:

前提假设

假设你的数据表模型定义如下(以SQLAlchemy ORM为例):

from sqlalchemy import Column, Integer, JSON
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class YourTable(Base):
    __tablename__ = "your_table"
    id = Column(Integer, primary_key=True)
    groups = Column(JSON)  # 如果是JSONB类型,替换为JSONB

方法1:直接聚合为单个JSON数组

使用PostgreSQL的json_array_elements(JSON类型)或jsonb_array_elements(JSONB类型)展开数组,再用json_agg(或jsonb_agg)将所有元素聚合为一个JSON数组:

from sqlalchemy import select, func
from sqlalchemy.orm import Session

# 假设已创建Session实例session
query = select(
    func.json_agg(func.json_array_elements(YourTable.groups)).label("merged_groups")
)
# 执行查询并获取结果
merged_groups = session.execute(query).scalar()

执行后merged_groups就是你预期的合并后JSON数组:

[{"id": 5, "name": "imba"}, {"id": 1, "name": "group1"}, {"id": 3, "name": "group3"}]

如果你的groups列是JSONB类型,只需将代码中的json_array_elements替换为jsonb_array_elements,json_agg替换为jsonb_agg即可。

方法2:先获取拆分后的单个元素再合并

如果你需要先得到拆分后的每个元素对象,再自行合并为列表,可以直接查询展开后的元素:

query = select(func.json_array_elements(YourTable.groups).label("group_item"))
results = session.execute(query).scalars().all()
# 转换为Python列表
merged_groups = list(results)

这种方式得到的merged_groups同样是符合预期的Python列表结构。

内容的提问来源于stack exchange,提问作者Michael Kor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 09:24:24