fixup! feat(db/InitializeDBData.py): Initialize db data

This commit is contained in:
Kirill committed 2025-11-14 14:10:20 +03:00
1 parent 991e512390
commit 7515116712
2 files changed
+60 -38

No files matched your search

+15 -14
View File
@@ -1,27 +1,28 @@
import sqlite3 import sqlite3
import uuid import json
from loguru import logger as log from loguru import logger as log
def init_database(): def init_database():
conn = sqlite3.connect('products.db') conn = sqlite3.connect('products.db')
cursor = conn.cursor() 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(''' cursor.execute('''
CREATE TABLE IF NOT EXISTS Product ( CREATE TABLE IF NOT EXISTS Product (
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL, name TEXT NOT NULL,
description TEXT, category INTEGER NOT NULL,
price REAL, desc TEXT,
image_path TEXT NOT NULL image_path TEXT,
) size TEXT,
''') FOREIGN KEY (category) REFERENCES Category (id)
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)
) )
''') ''')
+45 -24
View File
@@ -1,38 +1,59 @@
import sqlite3 import sqlite3
import json
from loguru import logger as log from loguru import logger as log
def add_products(): def add_products():
conn = sqlite3.connect('products.db') conn = sqlite3.connect('products.db')
cursor = conn.cursor() cursor = conn.cursor()
products_data = [ cursor.execute('SELECT COUNT(*) FROM Category')
('Труба ПВХ 110x2,25000', 'Труба ПВХ для ВНУТРЕННЕЙ канализации (цвет серый), со сплошной внутренней стенкой толщиной 2,2 мм. Размер: 110x2,25000. Количество в упаковке: 4 шт.', 98.00, 'images/internal_110_1.jpg', 'Внутренняя канализация'), category_count = cursor.fetchone()[0]
('Труба ПВХ 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', 'Внутренняя канализация'), if category_count > 0:
('Труба ПВХ 110x2,25000', 'Труба ПВХ для ВНУТРЕННЕЙ канализации (цвет серый), со сплошной внутренней стенкой толщиной 2,2 мм. Размер: 110x2,25000. Количество в упаковке: 4 шт.', 284.00, 'images/internal_110_4.jpg', 'Внутренняя канализация'), log.info("Категории уже существуют в базе данных, пропускаем добавление")
('Труба ПВХ 110x2,25000', 'Труба ПВХ для ВНУТРЕННЕЙ канализации (цвет серый), со сплошной внутренней стенкой толщиной 2,2 мм. Размер: 110x2,25000. Количество в упаковке: 4 шт.', 426.00, 'images/internal_110_5.jpg', 'Внутренняя канализация'), conn.close()
('Труба ПВХ 110x3,25000', 'Труба ПВХ для НАРУЖНОЙ канализации (цвет коричнево-оранжевый), со сплошной внутренней стенкой, класс жесткости 8мм. Размер: 110x3,25000. Количество в упаковке: 4 шт.', 125.00, 'images/external_110_1.jpg', 'Наружная канализация'), return
('Труба ПВХ 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', 'Наружная канализация'), categories_data = [
('Труба ПВХ 110x3,25000', 'Труба ПВХ для НАРУЖНОЙ канализации (цвет коричнево-оранжевый), со сплошной внутренней стенкой, класс жесткости 8мм. Размер: 110x3,25000. Количество в упаковке: 4 шт.', 585.00, 'images/external_110_4.jpg', 'Наружная канализация'), ('Внутренняя канализация', [["Диаметр", "string"], ["Длина", "string"], ["Толщина стенки", "string"], ["Цвет", "string"]]),
('Труба ПВХ 110x3,25000', 'Труба ПВХ для НАРУЖНОЙ канализации (цвет коричнево-оранжевый), со сплошной внутренней стенкой, класс жесткости 8мм. Размер: 110x3,25000. Количество в упаковке: 4 шт.', 780.00, 'images/external_110_5.jpg', 'Наружная канализация'), ('Наружная канализация', [["Диаметр", "string"], ["Длина", "string"], ["Толщина стенки", "string"], ["Класс жесткости", "string"], ["Цвет", "string"]])
('Труба ПВХ 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', 'Наружная канализация'),
] ]
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( cursor.execute(
'INSERT INTO Product (name, description, price, image_path) VALUES (?, ?, ?, ?)', 'INSERT INTO Category (name, atributes) VALUES (?, ?)',
(name, description, price, image_path) (name, atributes_json)
)
product_id = cursor.lastrowid
cursor.execute(
'INSERT INTO Type (name, product_id) VALUES (?, ?)',
(product_type, product_id)
) )
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.commit()
conn.close() conn.close()