Загрузка данных


import sqlite3

# 1. Подключение и создание таблиц
conn = sqlite3.connect("clinic.db")
cursor = conn.cursor()
cursor.execute("PRAGMA foreign_keys = ON;")

cursor.executescript("""
CREATE TABLE IF NOT EXISTS Service (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    description TEXT,
    price REAL NOT NULL
);

CREATE TABLE IF NOT EXISTS Patient (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    first_name TEXT NOT NULL,
    last_name TEXT NOT NULL,
    birthday TEXT NOT NULL,
    phone TEXT NOT NULL
);

CREATE TABLE IF NOT EXISTS Doctor (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    first_name TEXT NOT NULL,
    last_name TEXT NOT NULL,
    specialization TEXT NOT NULL
);

CREATE TABLE IF NOT EXISTS Cabinet (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    room_number TEXT NOT NULL,
    floor INTEGER NOT NULL,
    room_type TEXT NOT NULL
);

CREATE TABLE IF NOT EXISTS Appointment (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    patient_id INTEGER NOT NULL,
    doctor_id INTEGER NOT NULL,
    service_id INTEGER NOT NULL,
    cabinet_id INTEGER NOT NULL,
    datetime TEXT NOT NULL,
    status TEXT NOT NULL,
    complaints TEXT,
    diagnosis TEXT,
    FOREIGN KEY (patient_id) REFERENCES Patient(id) ON DELETE CASCADE,
    FOREIGN KEY (doctor_id) REFERENCES Doctor(id) ON DELETE RESTRICT,
    FOREIGN KEY (service_id) REFERENCES Service(id) ON DELETE RESTRICT,
    FOREIGN KEY (cabinet_id) REFERENCES Cabinet(id) ON DELETE RESTRICT
);
""")
conn.commit()


# ==========================================
# C — CREATE (Вставка записей через INSERT)
# ==========================================

# Добавляем пациента
cursor.execute("""
    INSERT INTO Patient (first_name, last_name, birthday, phone)
    VALUES (?, ?, ?, ?)
""", ("Иван", "Петров", "1995-04-12", "+79991234567"))
patient_id = cursor.lastrowid

# Добавляем врача
cursor.execute("""
    INSERT INTO Doctor (first_name, last_name, specialization)
    VALUES (?, ?, ?)
""", ("Анна", "Смирнова", "Терапевт"))
doctor_id = cursor.lastrowid

# Добавляем услугу
cursor.execute("""
    INSERT INTO Service (name, description, price)
    VALUES (?, ?, ?)
""", ("Первичный прием", "Осмотр и консультация врача", 2500.0))
service_id = cursor.lastrowid

# Добавляем кабинет
cursor.execute("""
    INSERT INTO Cabinet (room_number, floor, room_type)
    VALUES (?, ?, ?)
""", ("204", 2, "Консультационный"))
cabinet_id = cursor.lastrowid

# Создаем запись на прием (связываем внешние ключи)
cursor.execute("""
    INSERT INTO Appointment (patient_id, doctor_id, service_id, cabinet_id, datetime, status, complaints, diagnosis)
    VALUES (?, ?, ?, ?, ?, ?, ?, ?)
""", (patient_id, doctor_id, service_id, cabinet_id, "2026-09-15 14:00", "Запланирован", "Боль в горле", None))
appointment_id = cursor.lastrowid

conn.commit()
print(f"[CREATE] Данные добавлены! ID приема: {appointment_id}")


# ==========================================
# R — READ (Чтение данных через SELECT)
# ==========================================

cursor.execute("""
    SELECT 
        a.id, 
        p.first_name || ' ' || p.last_name AS patient_name,
        d.first_name || ' ' || d.last_name AS doctor_name,
        s.name AS service_name,
        c.room_number,
        a.status
    FROM Appointment a
    JOIN Patient p ON a.patient_id = p.id
    JOIN Doctor d ON a.doctor_id = d.id
    JOIN Service s ON a.service_id = s.id
    JOIN Cabinet c ON a.cabinet_id = c.id
    WHERE a.id = ?
""", (appointment_id,))

record = cursor.fetchone()
print(f"[READ] Информация о приеме: {record}")


# ==========================================
# U — UPDATE (Обновление через UPDATE)
# ==========================================

# Врач провел прием, ставим статус "Завершен" и записываем диагноз
cursor.execute("""
    UPDATE Appointment
    SET status = ?, diagnosis = ?
    WHERE id = ?
""", ("Завершен", "ОРВИ", appointment_id))

# Также обновим номер телефона у пациента
cursor.execute("""
    UPDATE Patient
    SET phone = ?
    WHERE id = ?
""", ("+79990001122", patient_id))

conn.commit()
print("[UPDATE] Статус приема и телефон пациента обновлены.")


# ==========================================
# D — DELETE (Удаление через DELETE)
# ==========================================

# Удаляем созданную запись на прием
cursor.execute("""
    DELETE FROM Appointment
    WHERE id = ?
""", (appointment_id,))

conn.commit()
print(f"[DELETE] Прием #{appointment_id} успешно удален из базы.")

# Проверяем, что запись действительно исчезла
cursor.execute("SELECT * FROM Appointment WHERE id = ?", (appointment_id,))
print(f"[CHECK] Поиск удаленной записи: {cursor.fetchone()}")

conn.close()