postgresql json 使用案例

该文章描述了如何利用SQL函数json_array_elements将JSON数组拆分成行,并用json_array_length获取数组长度,结合SQLAlchemy在Python中实现对包含JSON字段的图像列表的分页查询。方法包括设置偏移量和限制,以及计算总页数。
摘要由CSDN通过智能技术生成

使用函数

  • json_array_elements:将数组拆分为行
  • json_array_length:获取数组长度

整体逻辑

需求分析:

  1. 分页获取图像列表,images字段类型为JSON
  2. 获取images字段的总长度

实现

sql:

select json_array_elements(images) from target offset 3 limit 3;

select json_array_length(images) from target;

sqlalchemy:

def get_target_images(query: ImageQuery):
    offset, limit = get_offset_limit(query.page, query.page_size)
    # json_array_elements 将数组拆分为行
    image_list = db.session.query(func.json_array_elements(Image.images)).filter(Image.name == query.name).offset(
        offset).limit(limit).all()
    # json_array_length 获取数组长度
    total = db.session.query(func.json_array_length(Image.images)).filter(Image.name == query.name).scalar()
    total_page = math.ceil(total / limit)
    data = []
    for image in image_list:
        data.append(image[0])

    return response(data=data, total=total, total_page=total_page)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

llc的足迹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值