fixup! fix(DataBase): Recreate Initializing of structure
This commit is contained in:
1 parent
ce5f84beba
commit
57eebae265
1 file changed
+35
-41
+35
-41
@@ -1,3 +1,4 @@
|
|||||||
|
# InitializeDBData.py
|
||||||
import sqlite3
|
import sqlite3
|
||||||
from loguru import logger as log
|
from loguru import logger as log
|
||||||
|
|
||||||
@@ -248,7 +249,6 @@ def add_products():
|
|||||||
|
|
||||||
# Сначала собираем все уникальные значения
|
# Сначала собираем все уникальные значения
|
||||||
for category_data in products_data:
|
for category_data in products_data:
|
||||||
# Собираем значения из params продуктов
|
|
||||||
for product in category_data['products']:
|
for product in category_data['products']:
|
||||||
for param_value in product['params'].values():
|
for param_value in product['params'].values():
|
||||||
if param_value not in all_vals:
|
if param_value not in all_vals:
|
||||||
@@ -266,29 +266,34 @@ def add_products():
|
|||||||
for param_name, param_value in product['params'].items():
|
for param_name, param_value in product['params'].items():
|
||||||
key = f"{param_name}_{param_value}"
|
key = f"{param_name}_{param_value}"
|
||||||
if key not in all_params:
|
if key not in all_params:
|
||||||
val_id = all_vals[param_value]
|
all_params[key] = {'id': param_counter, 'name': param_name, 'val': param_value}
|
||||||
all_params[key] = {'id': param_counter, 'name': param_name, 'val_id': val_id}
|
|
||||||
param_counter += 1
|
param_counter += 1
|
||||||
|
|
||||||
# Добавляем параметры в таблицу Param
|
# Добавляем параметры в таблицу Param
|
||||||
for key, param in all_params.items():
|
for key, param in all_params.items():
|
||||||
cursor.execute('INSERT INTO Param (id, name, val) VALUES (?, ?, ?)',
|
cursor.execute('INSERT INTO Param (id, name, val) VALUES (?, ?, ?)',
|
||||||
(param['id'], param['name'], param_value))
|
(param['id'], param['name'], param['val']))
|
||||||
log.info(f"Добавлен параметр: {param['name']} = {param_value}")
|
log.info(f"Добавлен параметр: {param['name']} = {param['val']}")
|
||||||
|
|
||||||
# Добавляем категории, продукты и связи
|
# Добавляем категории, CParams и связи
|
||||||
category_counter = 1
|
category_counter = 1
|
||||||
product_counter = 1
|
product_counter = 1
|
||||||
|
cparams_counter = 1
|
||||||
|
|
||||||
for category_data in products_data:
|
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 = {
|
category_params = {
|
||||||
'Назначение': 'внутренняя канализация' if 'ВНУТРЕННЕЙ' in category_data['category_name'] else 'наружная канализация',
|
'Назначение': 'внутренняя канализация' if 'ВНУТРЕННЕЙ' in category_data['category_name'] else 'наружная канализация',
|
||||||
'Цвет': 'серый' if 'ВНУТРЕННЕЙ' in category_data['category_name'] else 'коричнево-оранжевый',
|
'Цвет': 'серый' if 'ВНУТРЕННЕЙ' in category_data['category_name'] else 'коричнево-оранжевый',
|
||||||
'Тип стенки': 'сплошная внутренняя'
|
'Тип': 'со сплошной внутренней стенкой'
|
||||||
}
|
}
|
||||||
|
|
||||||
if 'ВНУТРЕННЕЙ' in category_data['category_name']:
|
if 'ВНУТРЕННЕЙ' in category_data['category_name']:
|
||||||
@@ -296,37 +301,31 @@ def add_products():
|
|||||||
else:
|
else:
|
||||||
category_params['Класс жесткости'] = '8 мм'
|
category_params['Класс жесткости'] = '8 мм'
|
||||||
|
|
||||||
|
# Добавляем CParams и связываем с категорией и значениями
|
||||||
for cparam_name, cparam_value in category_params.items():
|
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:
|
if cparam_value in all_vals:
|
||||||
val_id = all_vals[cparam_value]
|
val_id = all_vals[cparam_value]
|
||||||
cursor.execute('INSERT INTO CParams (name, val_id) VALUES (?, ?)',
|
cursor.execute('INSERT INTO CParams_Val (cparams_id, val_id) VALUES (?, ?)',
|
||||||
(cparam_name, val_id))
|
(cparams_counter, val_id))
|
||||||
cparams_ids.append(cursor.lastrowid)
|
|
||||||
log.info(f"Добавлен категорийный параметр: {cparam_name} = {cparam_value}")
|
log.info(f"Добавлен CParam: {cparam_name} со значением {cparam_value} для категории {category_data['category_name']}")
|
||||||
|
cparams_counter += 1
|
||||||
# Основной 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
|
|
||||||
|
|
||||||
# Добавляем продукты категории
|
# Добавляем продукты категории
|
||||||
first_product_id = None
|
|
||||||
for product in category_data['products']:
|
for product in category_data['products']:
|
||||||
# Добавляем продукт
|
# Добавляем продукт
|
||||||
cursor.execute('INSERT INTO Product (name, image_path) VALUES (?, ?)',
|
cursor.execute('INSERT INTO Product (id, name, image_path) VALUES (?, ?, ?)',
|
||||||
(product['name'], product['image_path']))
|
(product_counter, product['name'], product['image_path']))
|
||||||
product_id = cursor.lastrowid
|
product_id = product_counter
|
||||||
|
|
||||||
# Сохраняем ID первого продукта для связи с категорией
|
|
||||||
if first_product_id is None:
|
|
||||||
first_product_id = product_id
|
|
||||||
|
|
||||||
# Добавляем связи продукт-параметры
|
# Добавляем связи продукт-параметры
|
||||||
for param_name, param_value in product['params'].items():
|
for param_name, param_value in product['params'].items():
|
||||||
@@ -337,12 +336,7 @@ def add_products():
|
|||||||
(product_id, param_id))
|
(product_id, param_id))
|
||||||
|
|
||||||
product_counter += 1
|
product_counter += 1
|
||||||
log.info(f"Добавлен продукт: {product['name']} (цена: {product['price']} руб., упаковка: {product['quantity_per_package']} шт.)")
|
log.info(f"Добавлен продукт: {product['name']}")
|
||||||
|
|
||||||
# Обновляем prod_id для категории (первый продукт как представитель)
|
|
||||||
if first_product_id:
|
|
||||||
cursor.execute('UPDATE Category SET prod_id = ? WHERE id = ?',
|
|
||||||
(first_product_id, category_id))
|
|
||||||
|
|
||||||
category_counter += 1
|
category_counter += 1
|
||||||
log.info(f"Добавлена категория: {category_data['category_name']}")
|
log.info(f"Добавлена категория: {category_data['category_name']}")
|
||||||
|
|||||||
Reference in new issue
Block a user