Таблица определена с использованием sqlalchemy core:
categories = Table("categories", metadata,
Column("id", Integer, primary_key=True),
Column("name", String),
Column("parent_id", Integer,
ForeignKey("categories.id"),
Column("dept_id", Integer,
ForeignKey("departments.id"),
CheckConstraint('id!=parent_id'),
nullable=True),
UniqueConstraint('parent_id','name',
name='parent_category'))
Ожидаемое о / п:
{"id": 1,
"parent_id": null,
"name": "root",
"dept_id": null,
children:[
{id": 2, "parent_id": 1, "name": "Top_level", "dept_id": null},
{"id": 3, "parent_id": 1, "name": "Rt_Docs", "dept_id": null}}
]
}]
Что я пытался использовать sqlalchemy:
s = text ('с рекурсивным rec_cat в качестве (выберите id, parent_id, name, dept_id, 0 в качестве уровня, массив [id] в качестве path_info из категорий, где parent_id является нулевым объединением, все выберите cat1.id, cat1.parent_id, cat1 .name, cat1.dept_id, level + 1, path_info || cat1.parent_id из rec_cat p объединяет категории cat1 на cat1.parent_id = p.id, где не cat1.id = any (path_info)), dncc as (выберите cat1.parent_id , json_agg (jsonb_build_object (\ 'Name \', cat1.name)) :: jsonb как js из дерева rec_cat объединяет категории cat1, используя (id) где уровень> 0, а не id = любая (path_info) группа по объединению cat1.parent_id all выберите cat1.parent_id, jsonb_build_object (\ 'Name \', cat1.name) || jsonb_build_object (\ 'Sub-cat \', js) в качестве js из категорий соединения дерева dncc cat1 на cat1.id = tree.parent_id) выберите jsonb_agg (js) из dncc, где parent_id равен нулю ')
cat_list = []
mdept_id = None
rs = g.conn.execute(s)
for r in rs:
mx = collections.OrderedDict(r)
cat_list.append(mx)
#print cat_list, 'cat_list'
return jsonify({'cat_list': cat_list}), 200
Я получаю вывод, но не в «желаемом» иерархическом вложенном формате. Это дает результат, но после каждого уровня выдает полное дерево с подкатегориями, как в ссылке. Pl. подскажите, какие изменения мне нужно сделать, чтобы получить o / p в формате, который я указывал выше. Я попробовал ссылку: введите описание ссылки здесь
Результат с выше:
cat_list": [
{
"jsonb_agg": [
{
"Name": "root",
"Sub-cat": [
{
"Name": "dne-mount"
},
{
"Name": "dne-mktg"
},
{
"Name": "Marketing"
},
{
"Name": "Top_level"
},
{
"Name": "Rt_Docs"
}
]
},
{
"Name": "root",
"Sub-cat": {
"Name": "Top_level",
"Sub-cat": [
{
"Name": "Cat1"
}
]
т. не вложенный список