/
vikpik
/
DOW_system
Обзор
Документация
Войти
/
vikpik
/
DOW_system
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
database/create_db.py
217 строк
6 KB
vikpik
Полное обновление проекта
20 май 2026, 22:03
20 май 2026, 22:03
d7695ce
Код
Авторство
О чём код?
import sqlite3 import os import sys # Добавляем путь для импорта 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(os.path.dirname(__file__), 'dow.db') # Удаляем старую базу, если есть if os.path.exists(db_path): os.remove(db_path) print("Старая база удалена") # Подключаемся (создаётся новый файл) conn = sqlite3.connect(db_path) cursor = conn.cursor() print("Создаём таблицы...") # 1. Таблица групп (добавлено поле teacher_id) cursor.execute(''' CREATE TABLE groups ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, description TEXT, teacher_id INTEGER ) ''') # 2. Таблица пользователей (добавлено поле is_blocked) cursor.execute(''' CREATE TABLE users ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE NOT NULL, password TEXT NOT NULL, role TEXT NOT NULL, last_name TEXT, first_name TEXT, middle_name TEXT, phone TEXT, email TEXT, is_blocked INTEGER DEFAULT 0, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ''') # 3. Таблица детей cursor.execute(''' CREATE TABLE children ( id INTEGER PRIMARY KEY AUTOINCREMENT, last_name TEXT NOT NULL, first_name TEXT NOT NULL, middle_name TEXT, birth_date TEXT NOT NULL, address TEXT NOT NULL, group_id INTEGER, is_active INTEGER DEFAULT 1, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (group_id) REFERENCES groups (id) ) ''') # 4. Связь детей и родителей cursor.execute(''' CREATE TABLE child_parent ( child_id INTEGER, user_id INTEGER, relationship TEXT, PRIMARY KEY (child_id, user_id), FOREIGN KEY (child_id) REFERENCES children (id), FOREIGN KEY (user_id) REFERENCES users (id) ) ''') # 5. Посещаемость cursor.execute(''' CREATE TABLE attendance ( id INTEGER PRIMARY KEY AUTOINCREMENT, child_id INTEGER, date TEXT NOT NULL, status TEXT CHECK(status IN ('present', 'absent', 'late')) NOT NULL, reason TEXT, marked_by INTEGER, FOREIGN KEY (child_id) REFERENCES children (id), FOREIGN KEY (marked_by) REFERENCES users (id) ) ''') # 6. Задания на дом (добавлено поле is_completed) cursor.execute(''' CREATE TABLE tasks ( id INTEGER PRIMARY KEY AUTOINCREMENT, teacher_id INTEGER, child_id INTEGER, group_id INTEGER, title TEXT NOT NULL, description TEXT, due_date TEXT, attachment TEXT, is_public INTEGER DEFAULT 0, is_completed INTEGER DEFAULT 0, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (teacher_id) REFERENCES users (id), FOREIGN KEY (child_id) REFERENCES children (id), FOREIGN KEY (group_id) REFERENCES groups (id) ) ''') # 7. Объявления cursor.execute(''' CREATE TABLE announcements ( id INTEGER PRIMARY KEY AUTOINCREMENT, author_id INTEGER, group_id INTEGER, title TEXT NOT NULL, content TEXT NOT NULL, attachment TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (author_id) REFERENCES users (id), FOREIGN KEY (group_id) REFERENCES groups (id) ) ''') # 8. Медицинская информация cursor.execute(''' CREATE TABLE medical_records ( id INTEGER PRIMARY KEY AUTOINCREMENT, child_id INTEGER UNIQUE, health_group TEXT, allergies TEXT, chronic_diseases TEXT, disability_group TEXT, FOREIGN KEY (child_id) REFERENCES children (id) ) ''') # 9. Прививки cursor.execute(''' CREATE TABLE vaccinations ( id INTEGER PRIMARY KEY AUTOINCREMENT, child_id INTEGER, vaccine_name TEXT NOT NULL, vaccine_date TEXT NOT NULL, next_date TEXT, notes TEXT, FOREIGN KEY (child_id) REFERENCES children (id) ) ''') # 10. История переводов (добавлено поле reason) cursor.execute(''' CREATE TABLE transfer_history ( id INTEGER PRIMARY KEY AUTOINCREMENT, child_id INTEGER, from_group_id INTEGER, to_group_id INTEGER, transferred_by INTEGER, reason TEXT, transfer_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (child_id) REFERENCES children (id), FOREIGN KEY (from_group_id) REFERENCES groups (id), FOREIGN KEY (to_group_id) REFERENCES groups (id), FOREIGN KEY (transferred_by) REFERENCES users (id) ) ''') print("Все таблицы созданы") # Добавляем тестовые данные print("Добавляем тестовые данные...") # Группы cursor.executemany( "INSERT INTO groups (name) VALUES (?)", [('Младшая группа',), ('Средняя группа',), ('Старшая группа',)] ) # Тестовый администратор cursor.execute( "INSERT INTO users (username, password, role, last_name, first_name) VALUES (?, ?, ?, ?, ?)", ('admin', hash_password('admin123'), 'admin', 'Админов', 'Админ') ) # Тестовый воспитатель cursor.execute( "INSERT INTO users (username, password, role, last_name, first_name) VALUES (?, ?, ?, ?, ?)", ('teacher1', hash_password('teacher123'), 'teacher', 'Воспитателева', 'Анна') ) # Сохраняем изменения conn.commit() # Проверяем, что создалось cursor.execute("SELECT name FROM sqlite_master WHERE type='table'") tables = cursor.fetchall() print("Созданные таблицы:", [t[0] for t in tables]) # Проверяем пользователей cursor.execute("SELECT username, role FROM users") users = cursor.fetchall() print("Созданные пользователи:", users) # Закрываем соединение conn.close() print("\n" + "=" * 50) print("Готово! База данных создана.") print("=" * 50) print("\nЛогины и пароли для входа:") print(" Администратор: admin / admin123") print(" Воспитатель: teacher1 / teacher123") print("\nДля добавления полных тестовых данных запустите:") print(" python database/add_test_data.py")