""" Скрипт создания демо-базы данных для Ru2SQL. Запуск из корня проекта: python data/demo/create_demo_db.py """ import random import sqlite3 from datetime import date, timedelta from pathlib import Path DB_PATH = Path(__file__).parent / "sales.sqlite" def create_db(): if DB_PATH.exists(): DB_PATH.unlink() conn = sqlite3.connect(DB_PATH) cur = conn.cursor() cur.executescript(""" CREATE TABLE customers ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, city TEXT, phone TEXT, email TEXT, created_at TEXT DEFAULT (date('now')) ); CREATE TABLE managers ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, department TEXT ); CREATE TABLE products ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, category TEXT, price REAL NOT NULL, is_active INTEGER DEFAULT 1 ); -- amount — итоговая сумма заказа в рублях (не путать с order_items.price) CREATE TABLE orders ( id INTEGER PRIMARY KEY AUTOINCREMENT, customer_id INTEGER REFERENCES customers(id), manager_id INTEGER REFERENCES managers(id), amount REAL NOT NULL, status TEXT DEFAULT 'paid', order_date TEXT NOT NULL ); -- price — цена за единицу товара; quantity — количество штук CREATE TABLE order_items ( id INTEGER PRIMARY KEY AUTOINCREMENT, order_id INTEGER REFERENCES orders(id), product_id INTEGER REFERENCES products(id), quantity INTEGER NOT NULL, price REAL NOT NULL ); """) customers = [ ("ООО Ромашка", "Москва", "+7 495 111-22-33", "romashka@example.com"), ("ИП Петров", "Санкт-Петербург", "+7 812 333-44-55", "petrov@example.com"), ("Сеть магазинов Радуга","Казань", "+7 843 555-66-77", "raduga@example.com"), ("АО Стройснаб", "Екатеринбург", "+7 343 777-88-99", "stroysnab@example.com"), ("ООО Технолайн", "Новосибирск", "+7 383 999-00-11", "technoline@example.com"), ("ИП Сидорова", "Москва", "+7 495 222-33-44", "sidorova@example.com"), ("ООО Прогресс", "Краснодар", "+7 861 444-55-66", "progress@example.com"), ("ЗАО Мегатрейд", "Самара", "+7 846 666-77-88", "megatrade@example.com"), ] cur.executemany( "INSERT INTO customers (name, city, phone, email) VALUES (?,?,?,?)", customers, ) managers = [ ("Иванов Алексей", "Продажи"), ("Смирнова Мария", "Продажи"), ("Козлов Дмитрий", "Корпоративные клиенты"), ("Новикова Анна", "Корпоративные клиенты"), ] cur.executemany("INSERT INTO managers (name, department) VALUES (?,?)", managers) products_data = [ ("Ноутбук Dell XPS 15", "Электроника", 89990.0, 1), ("Монитор LG 27inch", "Электроника", 24990.0, 1), ("Клавиатура Logitech MX", "Периферия", 8990.0, 1), ("Мышь Logitech G502", "Периферия", 5490.0, 1), ("Наушники Sony WH-1000XM5", "Аудио", 29990.0, 1), ("Веб-камера Logitech C920", "Периферия", 7990.0, 1), ("SSD Samsung 1TB", "Комплектующие", 6990.0, 1), ("Принтер HP LaserJet", "Оргтехника", 18990.0, 0), ("Роутер TP-Link AX3000", "Сетевое оборудование", 4990.0, 1), ("ИБП APC 1500VA", "Сетевое оборудование",14990.0, 1), ] cur.executemany( "INSERT INTO products (name, category, price, is_active) VALUES (?,?,?,?)", products_data, ) random.seed(42) start = date(2025, 1, 1) end = date(2026, 4, 30) delta = (end - start).days statuses = ["paid", "paid", "paid", "pending", "cancelled"] order_id = 1 items_rows = [] for _ in range(120): d = start + timedelta(days=random.randint(0, delta)) customer_id = random.randint(1, 8) manager_id = random.randint(1, 4) status = random.choice(statuses) n_items = random.randint(1, 4) picked = random.sample(range(1, 11), n_items) total = 0.0 for prod_id in picked: qty = random.randint(1, 5) price = products_data[prod_id - 1][2] total += qty * price items_rows.append((order_id, prod_id, qty, price)) cur.execute( "INSERT INTO orders (customer_id, manager_id, amount, status, order_date) " "VALUES (?,?,?,?,?)", (customer_id, manager_id, round(total, 2), status, d.isoformat()), ) order_id += 1 cur.executemany( "INSERT INTO order_items (order_id, product_id, quantity, price) VALUES (?,?,?,?)", items_rows, ) conn.commit() conn.close() print(f"База создана: {DB_PATH}") conn2 = sqlite3.connect(DB_PATH) for tbl in ["customers", "managers", "products", "orders", "order_items"]: cnt = conn2.execute(f"SELECT COUNT(*) FROM {tbl}").fetchone()[0] print(f" {tbl}: {cnt} строк") conn2.close() if __name__ == "__main__": create_db()