Python 获取由另一个表连接的主类别下的子类别

Python 获取由另一个表连接的主类别下的子类别,python,sql,pymysql,rdms,Python,Sql,Pymysql,Rdms,例如,当前数据库有一个类别表、子类别表和一个数据表,其中每一行都有一个相关的类别id和子类别id作为外键。可以有多个属于同一类别和子类别的数据行。类别和子类别不是直接相关的,而是通过数据表进行的。需求是生成json响应,其中返回所有类别及其下的子类别。所需的响应如下所示 { "categories":[ { "id": 1, "name": "catego

例如,当前数据库有一个类别表、子类别表和一个数据表,其中每一行都有一个相关的类别id和子类别id作为外键。可以有多个属于同一类别和子类别的数据行。类别和子类别不是直接相关的,而是通过数据表进行的。需求是生成json响应,其中返回所有类别及其下的子类别。所需的响应如下所示

{
    "categories":[
        {
            "id": 1,
            "name": "category one",
            "sub_categories": [
                {
                    "id": 1,
                    "name": "name 1"
                },
                {
                    "id": 2,
                    "name": "name 2"
                }
            ]
        }]
}
使用下面的sql guery(JSON_对象和JSON_数组)可以生成上面的响应

    cursor = connection.cursor()
    sql = "select JSON_OBJECT('id',p.`id`,'name',`p`.`name`, 'slug', `p`.`name` " \
          "'subcategory', " \
          "(select JSON_ARRAYAGG(" \
          " JSON_OBJECT('id',`m`.`id`,'name',`m`.`name`)" \
          ")`subcategory`" \
          "  from data t inner join subcategories m on `m`.`id`=`t`.`subcategory_id`" \
          " where `t`.`category_id` = `p`.`id` and `t`.`deleted_at` is null )" \
          ")`categories`" \
          " from categories p;"
    cursor.execute(sql)
    result = cursor.fetchall()
    categories = json.loads(json.dumps(result, default=convert_object_to_string))
    category_data=[]
    for row in categories:
        category_data.append(json.loads(row[0]))
我想要一个更好的解决方案,并且只返回不同的值