From 75151167124d28d202a83a5c1ceef3f3570049ee Mon Sep 17 00:00:00 2001 From: Kirill Date: Fri, 14 Nov 2025 14:10:20 +0300 Subject: [PATCH] fixup! feat(db/InitializeDBData.py): Initialize db data --- db/InitializeDB.py | 29 +++++++++--------- db/InitializeDBData.py | 69 +++++++++++++++++++++++++++--------------- 2 files changed, 60 insertions(+), 38 deletions(-) diff --git a/db/InitializeDB.py b/db/InitializeDB.py index e991596..6753191 100644 --- a/db/InitializeDB.py +++ b/db/InitializeDB.py @@ -1,27 +1,28 @@ import sqlite3 -import uuid +import json from loguru import logger as log def init_database(): conn = sqlite3.connect('products.db') cursor = conn.cursor() - + + cursor.execute(''' + CREATE TABLE IF NOT EXISTS Category ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL UNIQUE, + atributes TEXT NOT NULL + ) + ''') + cursor.execute(''' CREATE TABLE IF NOT EXISTS Product ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, - description TEXT, - price REAL, - image_path TEXT NOT NULL - ) - ''') - - cursor.execute(''' - CREATE TABLE IF NOT EXISTS Type ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - name TEXT NOT NULL, - product_id INTEGER, - FOREIGN KEY (product_id) REFERENCES Product (id) + category INTEGER NOT NULL, + desc TEXT, + image_path TEXT, + size TEXT, + FOREIGN KEY (category) REFERENCES Category (id) ) ''') diff --git a/db/InitializeDBData.py b/db/InitializeDBData.py index c6fce81..5c4b3db 100644 --- a/db/InitializeDBData.py +++ b/db/InitializeDBData.py @@ -1,38 +1,59 @@ import sqlite3 +import json from loguru import logger as log def add_products(): conn = sqlite3.connect('products.db') cursor = conn.cursor() - products_data = [ - ('Труба ПВХ 110x2,25000', 'Труба ПВХ для ВНУТРЕННЕЙ канализации (цвет серый), со сплошной внутренней стенкой толщиной 2,2 мм. Размер: 110x2,25000. Количество в упаковке: 4 шт.', 98.00, 'images/internal_110_1.jpg', 'Внутренняя канализация'), - ('Труба ПВХ 110x2,25000', 'Труба ПВХ для ВНУТРЕННЕЙ канализации (цвет серый), со сплошной внутренней стенкой толщиной 2,2 мм. Размер: 110x2,25000. Количество в упаковке: 4 шт.', 165.00, 'images/internal_110_2.jpg', 'Внутренняя канализация'), - ('Труба ПВХ 110x2,25000', 'Труба ПВХ для ВНУТРЕННЕЙ канализации (цвет серый), со сплошной внутренней стенкой толщиной 2,2 мм. Размер: 110x2,25000. Количество в упаковке: 4 шт.', 236.00, 'images/internal_110_3.jpg', 'Внутренняя канализация'), - ('Труба ПВХ 110x2,25000', 'Труба ПВХ для ВНУТРЕННЕЙ канализации (цвет серый), со сплошной внутренней стенкой толщиной 2,2 мм. Размер: 110x2,25000. Количество в упаковке: 4 шт.', 284.00, 'images/internal_110_4.jpg', 'Внутренняя канализация'), - ('Труба ПВХ 110x2,25000', 'Труба ПВХ для ВНУТРЕННЕЙ канализации (цвет серый), со сплошной внутренней стенкой толщиной 2,2 мм. Размер: 110x2,25000. Количество в упаковке: 4 шт.', 426.00, 'images/internal_110_5.jpg', 'Внутренняя канализация'), - ('Труба ПВХ 110x3,25000', 'Труба ПВХ для НАРУЖНОЙ канализации (цвет коричнево-оранжевый), со сплошной внутренней стенкой, класс жесткости 8мм. Размер: 110x3,25000. Количество в упаковке: 4 шт.', 125.00, 'images/external_110_1.jpg', 'Наружная канализация'), - ('Труба ПВХ 110x3,25000', 'Труба ПВХ для НАРУЖНОЙ канализации (цвет коричнево-оранжевый), со сплошной внутренней стенкой, класс жесткости 8мм. Размер: 110x3,25000. Количество в упаковке: 4 шт.', 220.00, 'images/external_110_2.jpg', 'Наружная канализация'), - ('Труба ПВХ 110x3,25000', 'Труба ПВХ для НАРУЖНОЙ канализации (цвет коричнево-оранжевый), со сплошной внутренней стенкой, класс жесткости 8мм. Размер: 110x3,25000. Количество в упаковке: 4 шт.', 380.00, 'images/external_110_3.jpg', 'Наружная канализация'), - ('Труба ПВХ 110x3,25000', 'Труба ПВХ для НАРУЖНОЙ канализации (цвет коричнево-оранжевый), со сплошной внутренней стенкой, класс жесткости 8мм. Размер: 110x3,25000. Количество в упаковке: 4 шт.', 585.00, 'images/external_110_4.jpg', 'Наружная канализация'), - ('Труба ПВХ 110x3,25000', 'Труба ПВХ для НАРУЖНОЙ канализации (цвет коричнево-оранжевый), со сплошной внутренней стенкой, класс жесткости 8мм. Размер: 110x3,25000. Количество в упаковке: 4 шт.', 780.00, 'images/external_110_5.jpg', 'Наружная канализация'), - ('Труба ПВХ 160x3,50000', 'Труба ПВХ для НАРУЖНОЙ канализации (цвет коричнево-оранжевый), со сплошной внутренней стенкой, класс жесткости 8мм. Размер: 160x3,50000. Количество в упаковке: 2 шт.', 398.00, 'images/external_160_1.jpg', 'Наружная канализация'), - ('Труба ПВХ 160x3,50000', 'Труба ПВХ для НАРУЖНОЙ канализации (цвет коричнево-оранжевый), со сплошной внутренней стенкой, класс жесткости 8мм. Размер: 160x3,50000. Количество в упаковке: 2 шт.', 724.00, 'images/external_160_2.jpg', 'Наружная канализация'), - ('Труба ПВХ 160x3,50000', 'Труба ПВХ для НАРУЖНОЙ канализации (цвет коричнево-оранжевый), со сплошной внутренней стенкой, класс жесткости 8мм. Размер: 160x3,50000. Количество в упаковке: 2 шт.', 1068.00, 'images/external_160_3.jpg', 'Наружная канализация'), + cursor.execute('SELECT COUNT(*) FROM Category') + category_count = cursor.fetchone()[0] + + if category_count > 0: + log.info("Категории уже существуют в базе данных, пропускаем добавление") + conn.close() + return + + categories_data = [ + ('Внутренняя канализация', [["Диаметр", "string"], ["Длина", "string"], ["Толщина стенки", "string"], ["Цвет", "string"]]), + ('Наружная канализация', [["Диаметр", "string"], ["Длина", "string"], ["Толщина стенки", "string"], ["Класс жесткости", "string"], ["Цвет", "string"]]) ] - for name, description, price, image_path, product_type in products_data: + category_ids = {} + for name, atributes in categories_data: + atributes_json = json.dumps(atributes) cursor.execute( - 'INSERT INTO Product (name, description, price, image_path) VALUES (?, ?, ?, ?)', - (name, description, price, image_path) - ) - - product_id = cursor.lastrowid - - cursor.execute( - 'INSERT INTO Type (name, product_id) VALUES (?, ?)', - (product_type, product_id) + 'INSERT INTO Category (name, atributes) VALUES (?, ?)', + (name, atributes_json) ) + category_ids[name] = cursor.lastrowid + log.info(f"Добавлена категория: {name}") + + products_data = [ + ('Труба ПВХ 110x2,25000', 'Труба ПВХ для ВНУТРЕННЕЙ канализации (цвет серый), со сплошной внутренней стенкой толщиной 2,2 мм. Размер: 110x2,25000. Количество в упаковке: 4 шт.', 'images/internal_110_1.jpg', '110x2,25000', 'Внутренняя канализация'), + ('Труба ПВХ 110x2,25000', 'Труба ПВХ для ВНУТРЕННЕЙ канализации (цвет серый), со сплошной внутренней стенкой толщиной 2,2 мм. Размер: 110x2,25000. Количество в упаковке: 4 шт.', 'images/internal_110_2.jpg', '110x2,25000', 'Внутренняя канализация'), + ('Труба ПВХ 110x2,25000', 'Труба ПВХ для ВНУТРЕННЕЙ канализации (цвет серый), со сплошной внутренней стенкой толщиной 2,2 мм. Размер: 110x2,25000. Количество в упаковке: 4 шт.', 'images/internal_110_3.jpg', '110x2,25000', 'Внутренняя канализация'), + ('Труба ПВХ 110x2,25000', 'Труба ПВХ для ВНУТРЕННЕЙ канализации (цвет серый), со сплошной внутренней стенкой толщиной 2,2 мм. Размер: 110x2,25000. Количество в упаковке: 4 шт.', 'images/internal_110_4.jpg', '110x2,25000', 'Внутренняя канализация'), + ('Труба ПВХ 110x2,25000', 'Труба ПВХ для ВНУТРЕННЕЙ канализации (цвет серый), со сплошной внутренней стенкой толщиной 2,2 мм. Размер: 110x2,25000. Количество в упаковке: 4 шт.', 'images/internal_110_5.jpg', '110x2,25000', 'Внутренняя канализация'), + ('Труба ПВХ 110x3,25000', 'Труба ПВХ для НАРУЖНОЙ канализации (цвет коричнево-оранжевый), со сплошной внутренней стенкой, класс жесткости 8мм. Размер: 110x3,25000. Количество в упаковке: 4 шт.', 'images/external_110_1.jpg', '110x3,25000', 'Наружная канализация'), + ('Труба ПВХ 110x3,25000', 'Труба ПВХ для НАРУЖНОЙ канализации (цвет коричнево-оранжевый), со сплошной внутренней стенкой, класс жесткости 8мм. Размер: 110x3,25000. Количество в упаковке: 4 шт.', 'images/external_110_2.jpg', '110x3,25000', 'Наружная канализация'), + ('Труба ПВХ 110x3,25000', 'Труба ПВХ для НАРУЖНОЙ канализации (цвет коричнево-оранжевый), со сплошной внутренней стенкой, класс жесткости 8мм. Размер: 110x3,25000. Количество в упаковке: 4 шт.', 'images/external_110_3.jpg', '110x3,25000', 'Наружная канализация'), + ('Труба ПВХ 110x3,25000', 'Труба ПВХ для НАРУЖНОЙ канализации (цвет коричнево-оранжевый), со сплошной внутренней стенкой, класс жесткости 8мм. Размер: 110x3,25000. Количество в упаковке: 4 шт.', 'images/external_110_4.jpg', '110x3,25000', 'Наружная канализация'), + ('Труба ПВХ 110x3,25000', 'Труба ПВХ для НАРУЖНОЙ канализации (цвет коричнево-оранжевый), со сплошной внутренней стенкой, класс жесткости 8мм. Размер: 110x3,25000. Количество в упаковке: 4 шт.', 'images/external_110_5.jpg', '110x3,25000', 'Наружная канализация'), + ('Труба ПВХ 160x3,50000', 'Труба ПВХ для НАРУЖНОЙ канализации (цвет коричнево-оранжевый), со сплошной внутренней стенкой, класс жесткости 8мм. Размер: 160x3,50000. Количество в упаковке: 2 шт.', 'images/external_160_1.jpg', '160x3,50000', 'Наружная канализация'), + ('Труба ПВХ 160x3,50000', 'Труба ПВХ для НАРУЖНОЙ канализации (цвет коричнево-оранжевый), со сплошной внутренней стенкой, класс жесткости 8мм. Размер: 160x3,50000. Количество в упаковке: 2 шт.', 'images/external_160_2.jpg', '160x3,50000', 'Наружная канализация'), + ('Труба ПВХ 160x3,50000', 'Труба ПВХ для НАРУЖНОЙ канализации (цвет коричнево-оранжевый), со сплошной внутренней стенкой, класс жесткости 8мм. Размер: 160x3,50000. Количество в упаковке: 2 шт.', 'images/external_160_3.jpg', '160x3,50000', 'Наружная канализация'), + ] + + for name, desc, image_path, size, category_name in products_data: + cursor.execute('SELECT id FROM Category WHERE name = ?', (category_name,)) + category_row = cursor.fetchone() + if category_row: + category_id = category_row[0] + cursor.execute( + 'INSERT INTO Product (name, category, desc, image_path, size) VALUES (?, ?, ?, ?, ?)', + (name, category_id, desc, image_path, size) + ) conn.commit() conn.close()