From 57eebae26596a498916797a0bbc0c9bc00c701c1 Mon Sep 17 00:00:00 2001 From: Kirill Date: Sun, 23 Nov 2025 22:42:33 +0300 Subject: [PATCH] fixup! fix(DataBase): Recreate Initializing of structure --- db/InitializeDBData.py | 76 +++++++++++++++++++----------------------- 1 file changed, 35 insertions(+), 41 deletions(-) diff --git a/db/InitializeDBData.py b/db/InitializeDBData.py index 04b778e..4b7f42d 100644 --- a/db/InitializeDBData.py +++ b/db/InitializeDBData.py @@ -1,3 +1,4 @@ +# InitializeDBData.py import sqlite3 from loguru import logger as log @@ -248,7 +249,6 @@ def add_products(): # Сначала собираем все уникальные значения for category_data in products_data: - # Собираем значения из params продуктов for product in category_data['products']: for param_value in product['params'].values(): if param_value not in all_vals: @@ -266,29 +266,34 @@ def add_products(): for param_name, param_value in product['params'].items(): key = f"{param_name}_{param_value}" if key not in all_params: - val_id = all_vals[param_value] - all_params[key] = {'id': param_counter, 'name': param_name, 'val_id': val_id} + all_params[key] = {'id': param_counter, 'name': param_name, 'val': param_value} param_counter += 1 # Добавляем параметры в таблицу Param for key, param in all_params.items(): cursor.execute('INSERT INTO Param (id, name, val) VALUES (?, ?, ?)', - (param['id'], param['name'], param_value)) - log.info(f"Добавлен параметр: {param['name']} = {param_value}") + (param['id'], param['name'], param['val'])) + log.info(f"Добавлен параметр: {param['name']} = {param['val']}") - # Добавляем категории, продукты и связи + # Добавляем категории, CParams и связи category_counter = 1 product_counter = 1 + cparams_counter = 1 for category_data in products_data: - # Создаем CParams для категории (основные характеристики категории) - cparams_ids = [] - - # Основные параметры категории из описания + # Добавляем категорию + cursor.execute(''' + INSERT INTO Category (id, name, image_path) + VALUES (?, ?, ?) + ''', (category_counter, category_data['category_name'], category_data['category_image'])) + + category_id = category_counter + + # Создаем CParams для категории и связываем с значениями category_params = { 'Назначение': 'внутренняя канализация' if 'ВНУТРЕННЕЙ' in category_data['category_name'] else 'наружная канализация', 'Цвет': 'серый' if 'ВНУТРЕННЕЙ' in category_data['category_name'] else 'коричнево-оранжевый', - 'Тип стенки': 'сплошная внутренняя' + 'Тип': 'со сплошной внутренней стенкой' } if 'ВНУТРЕННЕЙ' in category_data['category_name']: @@ -296,37 +301,31 @@ def add_products(): else: category_params['Класс жесткости'] = '8 мм' + # Добавляем CParams и связываем с категорией и значениями for cparam_name, cparam_value in category_params.items(): + # Добавляем CParam (без val_id) + cursor.execute('INSERT INTO CParams (id, name) VALUES (?, ?)', + (cparams_counter, cparam_name)) + + # Связываем категорию с CParams + cursor.execute('INSERT INTO Category_CParams (category_id, cparams_id) VALUES (?, ?)', + (category_id, cparams_counter)) + + # Связываем CParams с Val (многие-ко-многим) if cparam_value in all_vals: val_id = all_vals[cparam_value] - cursor.execute('INSERT INTO CParams (name, val_id) VALUES (?, ?)', - (cparam_name, val_id)) - cparams_ids.append(cursor.lastrowid) - log.info(f"Добавлен категорийный параметр: {cparam_name} = {cparam_value}") - - # Основной c_params_id для категории (берем первый) - main_cparams_id = cparams_ids[0] if cparams_ids else None - - # Добавляем категорию (пока без prod_id) - cursor.execute(''' - INSERT INTO Category (name, prod_id, image_path, c_params_id) - VALUES (?, ?, ?, ?) - ''', (category_data['category_name'], None, - category_data['category_image'], main_cparams_id)) - - category_id = cursor.lastrowid + cursor.execute('INSERT INTO CParams_Val (cparams_id, val_id) VALUES (?, ?)', + (cparams_counter, val_id)) + + log.info(f"Добавлен CParam: {cparam_name} со значением {cparam_value} для категории {category_data['category_name']}") + cparams_counter += 1 # Добавляем продукты категории - first_product_id = None for product in category_data['products']: # Добавляем продукт - cursor.execute('INSERT INTO Product (name, image_path) VALUES (?, ?)', - (product['name'], product['image_path'])) - product_id = cursor.lastrowid - - # Сохраняем ID первого продукта для связи с категорией - if first_product_id is None: - first_product_id = product_id + cursor.execute('INSERT INTO Product (id, name, image_path) VALUES (?, ?, ?)', + (product_counter, product['name'], product['image_path'])) + product_id = product_counter # Добавляем связи продукт-параметры for param_name, param_value in product['params'].items(): @@ -337,12 +336,7 @@ def add_products(): (product_id, param_id)) product_counter += 1 - log.info(f"Добавлен продукт: {product['name']} (цена: {product['price']} руб., упаковка: {product['quantity_per_package']} шт.)") - - # Обновляем prod_id для категории (первый продукт как представитель) - if first_product_id: - cursor.execute('UPDATE Category SET prod_id = ? WHERE id = ?', - (first_product_id, category_id)) + log.info(f"Добавлен продукт: {product['name']}") category_counter += 1 log.info(f"Добавлена категория: {category_data['category_name']}")