Делаю скрипт для записи данных в таблицу, бд MySQL. К полям, которые есть в тестовых данных я добавил поле "parent_id" для записи id родителя. Поле "children" в тестовых данных имеет бесконечную вложенность. Данные такого вида:
[
{
"id": 1,
"name": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438",
"alias": "users",
"children": [
{
"id": 2,
"name": "\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435",
"alias": "create"
},
{
"id": 3,
"name": "\u0421\u043f\u0438\u0441\u043e\u043a",
"alias": "list",
"children": [
{
"id": 4,
"name": "\u0410\u043a\u0442\u0438\u0432\u043d\u044b\u0435",
"alias": "active"
},
{
"id": 5,
"name": "\u0423\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0435",
"alias": "deleted"
}
]
},
{
"id": 8,
"name": "\u041f\u043e\u0438\u0441\u043a",
"alias": "search"
}
]
}
]
Код функции для записи в существующую таблицу. Obj - массив с данными.
def func(obj):
# проходим циклом по списку данных
for i, item in enumerate(obj):
if "children" in item:
global parent_id
parent_id = obj[i]["id"]
print(parent_id)
cur.execute("INSERT IGNORE INTO menu (id, name, alias, parent_id) VALUES (%s, %s, %s, %s)", (item["id"], item["name"], item["alias"], parent_id))
func(item["children"])
else:
cur.execute("INSERT IGNORE INTO menu (id, name, alias, parent_id) VALUES (%s, %s, %s, %s)", (item["id"], item["name"], item["alias"], parent_id))
Проблема с записью в поле "parent_id". Если это ребёнок - нужно записать id родителя. В "parent_id" объекта с id-8, записывается родитель id-3, хотя родитель у него id-1. Я думаю, что это из-за преждевременного запуска рекурсии в теле функции. Как сделать так, чтобы всё работало я пока не знаю. Буду рад любой помощи.
UPDATE
CREATE TABLE IF NOT EXISTS menu ( id INT PRIMARY KEY,
name VARCHAR(200),
alias VARCHAR(200),
parent_id INT DEFAULT 0 );
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Я пришёл с питона несколько дней назад, и для своих задач я использовал только opencvИ вот тут я захотел попробовать C++ и как бы смешно не было,...