Загрузка данных
import sqlite3
# Подключение к БД и активация внешних ключей
conn = sqlite3.connect("clinic.db")
cursor = conn.cursor()
cursor.execute("PRAGMA foreign_keys = ON;")
# 1. Создание структуры таблиц
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()
# ========================================================
# 1. CREATE — создаем справочники и 2 записи на прием
# ========================================================
# Пациенты
cursor.execute("INSERT INTO Patient (first_name, last_name, birthday, phone) VALUES (?, ?, ?, ?)",
("Иван", "Петров", "1995-04-12", "+79991112233"))
patient_1 = cursor.lastrowid
cursor.execute("INSERT INTO Patient (first_name, last_name, birthday, phone) VALUES (?, ?, ?, ?)",
("Елена", "Сидорова", "2001-08-25", "+79994445566"))
patient_2 = cursor.lastrowid
# Врачи
cursor.execute("INSERT INTO Doctor (first_name, last_name, specialization) VALUES (?, ?, ?)",
("Анна", "Смирнова", "Терапевт"))
doctor_1 = cursor.lastrowid
cursor.execute("INSERT INTO Doctor (first_name, last_name, specialization) VALUES (?, ?, ?)",
("Олег", "Кузнецов", "Офтальмолог"))
doctor_2 = cursor.lastrowid
# Услуги
cursor.execute("INSERT INTO Service (name, description, price) VALUES (?, ?, ?)",
("Первичный прием", "Осмотр терапевта", 2500.0))
service_1 = cursor.lastrowid
cursor.execute("INSERT INTO Service (name, description, price) VALUES (?, ?, ?)",
("Проверка зрения", "Диагностика на аппарате", 1800.0))
service_2 = cursor.lastrowid
# Кабинеты
cursor.execute("INSERT INTO Cabinet (room_number, floor, room_type) VALUES (?, ?, ?)",
("101", 1, "Терапия"))
cabinet_1 = cursor.lastrowid
cursor.execute("INSERT INTO Cabinet (room_number, floor, room_type) VALUES (?, ?, ?)",
("205", 2, "Офтальмология"))
cabinet_2 = cursor.lastrowid
# Создаем прием #1 (его мы позже удалим)
cursor.execute("""
INSERT INTO Appointment (patient_id, doctor_id, service_id, cabinet_id, datetime, status, complaints, diagnosis)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
""", (patient_1, doctor_1, service_1, cabinet_1, "2026-09-15 10:00", "Запланирован", "Температура 38", None))
appointment_1 = cursor.lastrowid
# Создаем прием #2 (он останется в базе)
cursor.execute("""
INSERT INTO Appointment (patient_id, doctor_id, service_id, cabinet_id, datetime, status, complaints, diagnosis)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
""", (patient_2, doctor_2, service_2, cabinet_2, "2026-09-16 12:30", "Запланирован", "Ухудшилось зрение вдаль", None))
appointment_2 = cursor.lastrowid
conn.commit()
print(f"[CREATE] Создано 2 приема: ID {appointment_1} и ID {appointment_2}")
# ========================================================
# 2. UPDATE — обновляем данные только для приема #2
# ========================================================
cursor.execute("""
UPDATE Appointment
SET status = ?, diagnosis = ?
WHERE id = ?
""", ("Завершен", "Миопия слабой степени", appointment_2))
conn.commit()
print(f"[UPDATE] Прием #{appointment_2} получил статус 'Завершен' и диагноз.")
# ========================================================
# 3. DELETE — удаляем только прием #1
# ========================================================
cursor.execute("DELETE FROM Appointment WHERE id = ?", (appointment_1,))
conn.commit()
print(f"[DELETE] Прием #{appointment_1} удален из базы (отменен).")
# ========================================================
# 4. READ — читаем базу и выводим остаток
# ========================================================
cursor.execute("""
SELECT
a.id,
p.first_name || ' ' || p.last_name AS patient,
d.first_name || ' ' || d.last_name AS doctor,
s.name AS service,
c.room_number,
a.datetime,
a.status,
a.diagnosis
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
""")
print("\n--- ТЕКУЩИЕ ЗАПИСИ В БАЗЕ (Остался только прием #2) ---")
rows = cursor.fetchall()
for row in rows:
print(f"ID приема: {row[0]}")
print(f"Пациент: {row[1]}")
print(f"Врач: {row[2]}")
print(f"Услуга: {row[3]}")
print(f"Кабинет: {row[4]}")
print(f"Время: {row[5]}")
print(f"Статус: {row[6]}")
print(f"Диагноз: {row[7]}")
conn.close()