/
vikpik
/
DOW_system
Обзор
Документация
Войти
/
vikpik
/
DOW_system
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
database/add_test_data.py
345 строк
18 KB
vikpik
Полное обновление проекта
20 май 2026, 22:03
20 май 2026, 22:03
d7695ce
Код
Авторство
О чём код?
import sqlite3 import os import sys from pathlib import Path from datetime import datetime, timedelta import random # Добавляем путь к родительской папке, чтобы найти utils sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from utils.security import hash_password # Путь к базе данных (в той же папке) DB_PATH = os.path.join(Path(__file__).parent, 'dow.db') def clear_all_data(cursor): """Очистить все таблицы от старых данных""" print("Очищаем старые данные...") tables = [ 'vaccinations', 'attendance', 'tasks', 'announcements', 'child_parent', 'medical_records', 'transfer_history', 'children', 'users' ] cursor.execute("PRAGMA foreign_keys = OFF") for table in tables: try: cursor.execute(f"DELETE FROM {table}") print(f" - Очищена таблица {table}") except Exception as e: print(f" - Не удалось очистить {table}: {e}") cursor.execute("PRAGMA foreign_keys = ON") try: cursor.execute("DELETE FROM sqlite_sequence") print(" - Сброшены счетчики ID") except: pass def add_test_data(force_clear=False): """Добавление тестовых данных в базу""" try: conn = sqlite3.connect(DB_PATH) cursor = conn.cursor() print("=" * 50) print("ДОБАВЛЕНИЕ ТЕСТОВЫХ ДАННЫХ") print("=" * 50) if force_clear: clear_all_data(cursor) # ===== 1. ГРУППЫ ===== groups = [ ('Младшая группа "Солнышко"', 'Дети 2-3 лет'), ('Средняя группа "Звездочки"', 'Дети 3-4 лет'), ('Старшая группа "Почемучки"', 'Дети 4-5 лет'), ('Подготовительная группа "Знайки"', 'Дети 5-6 лет'), ('Ясельная группа "Крохи"', 'Дети 1.5-2 лет') ] cursor.executemany("INSERT INTO groups (name, description) VALUES (?, ?)", groups) print(f"✓ Добавлено {len(groups)} групп") cursor.execute("SELECT id, name FROM groups") groups_dict = {name: id for id, name in cursor.fetchall()} # ===== 2. ДЕТИ ===== children_data = [ ('Иванов', 'Иван', 'Иванович', '2020-05-15', 'Младшая группа "Солнышко"', 'ул. Ленина, 1-15'), ('Петрова', 'Мария', 'Сергеевна', '2019-08-22', 'Средняя группа "Звездочки"', 'ул. Гагарина, 5-32'), ('Сидоров', 'Алексей', 'Петрович', '2018-11-10', 'Старшая группа "Почемучки"', 'ул. Победы, 10-5'), ('Козлова', 'Анна', 'Дмитриевна', '2017-03-18', 'Подготовительная группа "Знайки"', 'ул. Мира, 7-42'), ('Смирнов', 'Дмитрий', 'Алексеевич', '2021-01-25', 'Ясельная группа "Крохи"', 'ул. Лесная, 3-8'), ('Васильева', 'Елена', 'Андреевна', '2019-12-05', 'Средняя группа "Звездочки"', 'ул. Садовая, 12-18'), ('Морозов', 'Артем', 'Ильич', '2020-07-30', 'Младшая группа "Солнышко"', 'ул. Школьная, 4-21'), ('Волкова', 'Татьяна', 'Олеговна', '2018-09-14', 'Старшая группа "Почемучки"', 'ул. Новая, 8-3'), ('Зайцев', 'Максим', 'Романович', '2017-06-20', 'Подготовительная группа "Знайки"', 'ул. Советская, 15-7'), ('Белова', 'Наталья', 'Павловна', '2021-04-02', 'Ясельная группа "Крохи"', 'ул. Заречная, 2-11'), ('Новиков', 'Владимир', 'Сергеевич', '2019-10-28', 'Средняя группа "Звездочки"', 'ул. Северная, 6-23'), ('Кузнецова', 'Ольга', 'Викторовна', '2020-02-19', 'Младшая группа "Солнышко"', 'ул. Восточная, 9-14'), ('Соколов', 'Павел', 'Геннадьевич', '2018-04-07', 'Старшая группа "Почемучки"', 'ул. Южная, 11-6'), ('Михайлова', 'Дарья', 'Александровна', '2017-08-12', 'Подготовительная группа "Знайки"', 'ул. Парковая, 14-29'), ('Федоров', 'Никита', 'Денисович', '2021-09-01', 'Ясельная группа "Крохи"', 'ул. Центральная, 20-12') ] for child in children_data: group_id = groups_dict.get(child[4]) if group_id: cursor.execute(""" INSERT INTO children (last_name, first_name, middle_name, birth_date, address, group_id, is_active) VALUES (?, ?, ?, ?, ?, ?, 1) """, (child[0], child[1], child[2], child[3], child[5], group_id)) print(f"✓ Добавлено {len(children_data)} детей") # ===== 3. ПОЛЬЗОВАТЕЛИ (РОДИТЕЛИ И СОТРУДНИКИ) ===== # Сотрудники staff_data = [ ('admin', hash_password('admin123'), 'admin', 'Админов', 'Админ', 'Админович', '+79991112233'), ('director', hash_password('dir123'), 'director', 'Директорова', 'Елена', 'Петровна', '+79992223344'), ('teacher1', hash_password('teacher123'), 'teacher', 'Воспитателева', 'Анна', 'Ивановна', '+79993334455'), ('teacher2', hash_password('teacher123'), 'teacher', 'Петрова', 'Мария', 'Сергеевна', '+79994445566'), ('nurse1', hash_password('nurse123'), 'nurse', 'Медсестрова', 'Ольга', 'Викторовна', '+79995556677') ] for staff in staff_data: cursor.execute(""" INSERT INTO users (username, password, role, last_name, first_name, middle_name, phone) VALUES (?, ?, ?, ?, ?, ?, ?) """, staff) # Родители parents_data = [ ('+79261234567', hash_password('parent123'), 'Иванов', 'Петр', 'Сидорович', '+79261234567'), ('+79262345678', hash_password('parent123'), 'Петрова', 'Елена', 'Викторовна', '+79262345678'), ('+79263456789', hash_password('parent123'), 'Сидоров', 'Игорь', 'Александрович', '+79263456789'), ('+79264567890', hash_password('parent123'), 'Козлов', 'Андрей', 'Николаевич', '+79264567890'), ('+79265678901', hash_password('parent123'), 'Смирнова', 'Ольга', 'Сергеевна', '+79265678901'), ('+79266789012', hash_password('parent123'), 'Васильев', 'Сергей', 'Иванович', '+79266789012'), ('+79267890123', hash_password('parent123'), 'Морозова', 'Ирина', 'Павловна', '+79267890123'), ('+79268901234', hash_password('parent123'), 'Волков', 'Денис', 'Олегович', '+79268901234'), ('+79269012345', hash_password('parent123'), 'Зайцева', 'Татьяна', 'Михайловна', '+79269012345'), ('+79270123456', hash_password('parent123'), 'Белов', 'Константин', 'Аркадьевич', '+79270123456') ] for parent in parents_data: cursor.execute(""" INSERT INTO users (username, password, role, last_name, first_name, middle_name, phone) VALUES (?, ?, 'parent', ?, ?, ?, ?) """, parent) print(f"✓ Добавлено {len(staff_data)} сотрудников и {len(parents_data)} родителей") # Привязываем воспитателей к группам print("Привязываем воспитателей к группам...") # Назначаем teacher1 в младшую группу, teacher2 в среднюю cursor.execute("SELECT id FROM groups WHERE name LIKE '%Младшая%'") younger_group = cursor.fetchone() cursor.execute("SELECT id FROM groups WHERE name LIKE '%Средняя%'") middle_group = cursor.fetchone() cursor.execute("SELECT id FROM users WHERE username = 'teacher1'") teacher1 = cursor.fetchone() cursor.execute("SELECT id FROM users WHERE username = 'teacher2'") teacher2 = cursor.fetchone() if teacher1 and younger_group: cursor.execute("UPDATE groups SET teacher_id = ? WHERE id = ?", (teacher1[0], younger_group[0])) print(" ✓ Воспитатель teacher1 назначен в младшую группу") if teacher2 and middle_group: cursor.execute("UPDATE groups SET teacher_id = ? WHERE id = ?", (teacher2[0], middle_group[0])) print(" ✓ Воспитатель teacher2 назначен в среднюю группу") # ===== 4. СВЯЗИ ДЕТЕЙ С РОДИТЕЛЯМИ ===== cursor.execute("SELECT id FROM children") children_ids = [row[0] for row in cursor.fetchall()] cursor.execute("SELECT id FROM users WHERE role='parent'") parent_ids = [row[0] for row in cursor.fetchall()] for i, child_id in enumerate(children_ids): parent1_id = parent_ids[i % len(parent_ids)] rel1 = random.choice(['Мать', 'Отец']) cursor.execute(""" INSERT INTO child_parent (child_id, user_id, relationship) VALUES (?, ?, ?) """, (child_id, parent1_id, rel1)) if i % 2 == 0: parent2_id = parent_ids[(i + 3) % len(parent_ids)] rel2 = 'Отец' if rel1 == 'Мать' else 'Мать' cursor.execute(""" INSERT INTO child_parent (child_id, user_id, relationship) VALUES (?, ?, ?) """, (child_id, parent2_id, rel2)) print("✓ Созданы связи детей с родителями") # ===== 5. МЕДИЦИНСКИЕ ДАННЫЕ ===== health_groups = ['1', '2', '3'] allergies_list = ['Пыльца', 'Цитрусовые', 'Молоко', 'Лекарства', 'Шерсть животных'] chronic_list = ['Астма', 'Диабет', 'Аллергия', 'Экзема'] for child_id in children_ids: if random.random() < 0.8: cursor.execute(""" INSERT INTO medical_records (child_id, health_group, allergies, chronic_diseases) VALUES (?, ?, ?, ?) """, ( child_id, random.choice(health_groups), random.choice(allergies_list) if random.random() > 0.5 else None, random.choice(chronic_list) if random.random() > 0.7 else None )) print("✓ Добавлены медицинские данные") # ===== 6. ПРИВИВКИ ===== vaccines = [ ('БЦЖ', 30), ('Гепатит В', 30), ('АКДС', 45), ('Полиомиелит', 60), ('Корь', 365), ('Краснуха', 365) ] for child_id in children_ids: for _ in range(random.randint(2, 4)): vaccine = random.choice(vaccines) vac_date = datetime.now() - timedelta(days=random.randint(30, 200)) next_date = vac_date + timedelta(days=vaccine[1]) cursor.execute(""" INSERT INTO vaccinations (child_id, vaccine_name, vaccine_date, next_date) VALUES (?, ?, ?, ?) """, (child_id, vaccine[0], vac_date.strftime('%Y-%m-%d'), next_date.strftime('%Y-%m-%d'))) print("✓ Добавлены прививки") # ===== 7. ПОСЕЩАЕМОСТЬ ===== attendance_count = 0 for days_ago in range(30, 0, -1): date = (datetime.now() - timedelta(days=days_ago)).strftime('%Y-%m-%d') if datetime.strptime(date, '%Y-%m-%d').weekday() < 5: for child_id in children_ids: if random.random() < 0.85: status = 'present' reason = None else: status = 'absent' reasons = ['Болеет', 'Семейные обстоятельства', 'Отпуск'] reason = random.choice(reasons) cursor.execute(""" INSERT INTO attendance (child_id, date, status, reason, marked_by) VALUES (?, ?, ?, ?, 3) """, (child_id, date, status, reason)) attendance_count += 1 print(f"✓ Добавлено {attendance_count} отметок посещаемости") # ===== 8. ЗАДАНИЯ ===== tasks_titles = [ 'Выучить стихотворение', 'Нарисовать рисунок', 'Сделать поделку', 'Повторить буквы', 'Почитать книгу', 'Выучить песню' ] group_ids = list(groups_dict.values()) for i, group_id in enumerate(group_ids[:3]): cursor.execute(""" INSERT INTO tasks (teacher_id, group_id, title, description, due_date, is_public) VALUES (3, ?, ?, ?, ?, 1) """, ( group_id, tasks_titles[i], f'Описание задания для группы', (datetime.now() + timedelta(days=random.randint(3, 10))).strftime('%Y-%m-%d') )) for i, child_id in enumerate(children_ids[:8]): cursor.execute(""" INSERT INTO tasks (teacher_id, child_id, title, description, due_date, is_public) VALUES (3, ?, ?, ?, ?, 0) """, ( child_id, tasks_titles[i % len(tasks_titles)], f'Индивидуальное описание', (datetime.now() + timedelta(days=random.randint(3, 10))).strftime('%Y-%m-%d') )) print("✓ Добавлены задания") # ===== 9. ОБЪЯВЛЕНИЯ ===== announcements = [ ('Родительское собрание', 'Приглашаем на собрание 25 числа в 18:00.'), ('Праздник осени', 'Праздник осени состоится в пятницу.'), ('Вакцинация', 'Завтра плановая вакцинация в 10:00.'), ('Новогодний утренник', 'Готовимся к утреннику! Разучиваем стихи.') ] for title, content in announcements[:2]: cursor.execute(""" INSERT INTO announcements (author_id, title, content) VALUES (2, ?, ?) """, (title, content)) for i, group_id in enumerate(list(groups_dict.values())[:2]): cursor.execute(""" INSERT INTO announcements (author_id, group_id, title, content) VALUES (3, ?, ?, ?) """, (group_id, f'Объявление для группы', announcements[i+2][1])) print("✓ Добавлены объявления") # Сохраняем conn.commit() # Проверяем результат cursor.execute("SELECT COUNT(*) FROM children") children_count = cursor.fetchone()[0] cursor.execute("SELECT COUNT(*) FROM users") users_count = cursor.fetchone()[0] conn.close() print("\n" + "=" * 50) print(" ТЕСТОВЫЕ ДАННЫЕ УСПЕШНО ДОБАВЛЕНЫ!") print("=" * 50) print(f"\nВ базе данных:") print(f" Детей: {children_count}") print(f" Пользователей: {users_count}") print(f" Групп: {len(groups_dict)}") except Exception as e: print(f"❌ Ошибка: {e}") import traceback traceback.print_exc() if __name__ == "__main__": print("=" * 50) print("СКРИПТ ДОБАВЛЕНИЯ ТЕСТОВЫХ ДАННЫХ") print("=" * 50) if not os.path.exists(DB_PATH): print(f"❌ База данных не найдена: {DB_PATH}") print("Сначала запустите create_db.py") else: print("\nВНИМАНИЕ! Скрипт удалит все существующие данные!") response = input("\nПродолжить? (да/нет): ") if response.lower() in ['да', 'yes', 'y', 'д']: add_test_data(force_clear=True) else: print("Операция отменена")