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

如何查询关系表数据并输出包含订阅用户列表的Coach结构JSON结果

解决方案

1. 前置检查:确认多对多中间表定义

你的代码中关系配置用到了secondary=subs,需要先确保多对多中间表已提前定义,若未定义请在两个模型声明前添加以下代码:

subs = db.Table(
    'subs',
    db.Column('user_id', db.BigInteger, db.ForeignKey('user.user_id'), primary_key=True),
    db.Column('coach_id', db.BigInteger, db.ForeignKey('coach.coach_id'), primary_key=True)
)

2. 具体查询与序列化代码

你已经通过backref='subscribers'给Coach模型绑定了订阅用户关联属性,直接查询所有Coach后手动构造符合要求的输出结构即可,同时我们使用预加载优化避免N+1查询问题:

from flask import jsonify

def get_all_coaches_with_subscribers():
    # 预加载关联的订阅用户数据,提升查询性能
    coaches = Coach.query.options(db.joinedload(Coach.subscribers)).all()
    resp_data = []
    for coach in coaches:
        # 构造教练字段
        coach_item = {
            "coach_id": coach.coach_id,
            "coach_login": coach.login,
            "subscribers": []
        }
        # 构造订阅用户列表
        for subscriber in coach.subscribers:
            coach_item["subscribers"].append({
                "user_id": subscriber.user_id,
                "user_login": subscriber.login
            })
        resp_data.append(coach_item)
    # Flask环境下直接返回jsonify,普通Python环境可使用json.dumps(resp_data)
    return jsonify(resp_data)

输出说明

返回的JSON结构完全符合你的预期,单条数据示例如下:

{"coach_id":1,"coach_login":"Alan","subscribers":[{"user_id":1,"user_login":"John"}]}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:15:04