-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmodels.py
52 lines (44 loc) · 3.74 KB
/
models.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey, Date, Boolean
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, sessionmaker
from datetime import datetime
# Создаем базовый класс для моделей, используя декларативный стиль SQLAlchemy.
Base = declarative_base()
# Настраиваем подключение к базе данных SQLite. Путь к файлу DB указан относительно скрипта.
engine = create_engine('sqlite:///school_schedule.db')
# Создаем фабрику сессий, привязанную к нашему движку базы данных.
Session = sessionmaker(bind=engine)
# Определение модели Subject для представления предметов в базе данных.
class Subject(Base):
__tablename__ = 'subjects' # Название таблицы в базе данных.
id = Column(Integer, primary_key=True) # Уникальный идентификатор предмета.
name = Column(String, unique=True, nullable=False) # Название предмета. Должно быть уникальным.
schedules = relationship('Schedule', back_populates='subject') # Связь с расписанием.
# Определение модели Teacher для представления преподавателей.
class Teacher(Base):
__tablename__ = 'teachers'
id = Column(Integer, primary_key=True) # Уникальный идентификатор преподавателя.
name = Column(String, nullable=False) # Имя преподавателя.
schedules = relationship('Schedule', back_populates='teacher') # Связь с расписанием.
# Определение модели Classroom для представления кабинетов.
class Classroom(Base):
__tablename__ = 'classrooms'
id = Column(Integer, primary_key=True) # Уникальный идентификатор кабинета.
number = Column(Integer, unique=True, nullable=False) # Номер кабинета. Должен быть уникальным.
capacity = Column(Integer, nullable=False) # Вместимость кабинета.
schedules = relationship('Schedule', back_populates='classroom') # Связь с расписанием.
# Определение модели Schedule для представления расписания.
class Schedule(Base):
__tablename__ = 'schedules'
id = Column(Integer, primary_key=True) # Уникальный идентификатор записи расписания.
subject_id = Column(Integer, ForeignKey('subjects.id'), nullable=False) # Внешний ключ к предмету.
teacher_id = Column(Integer, ForeignKey('teachers.id'), nullable=False) # Внешний ключ к преподавателю.
classroom_id = Column(Integer, ForeignKey('classrooms.id'), nullable=False) # Внешний ключ к кабинету.
hidden = Column(Boolean, default=False) # Флаг, указывающий, скрыта ли запись расписания.
date = Column(Date, nullable=False) # Дата проведения урока.
# Обратные связи для навигации по модели.
subject = relationship("Subject", back_populates="schedules")
teacher = relationship("Teacher", back_populates="schedules")
classroom = relationship("Classroom", back_populates="schedules")
# Создаем все таблицы в базе данных, основываясь на определениях моделей.
Base.metadata.create_all(engine)