I have the following model schema having 2 types of relationships: Student -> Grade (one-to-many) Student <- StudentClassLink -> Class (many-to-many)
When deleting Student records, records from the Grade table are removed as well (one-to-many relation, but linked records from the link table (StudentClassLink) are not, the interesting part is that when I update Student relations the many-to-many relation (link table) is updated as well, but not when deleting the record itself
sessionmaker = connect_to_database('sqlite:///storage/school-register.db')
with sessionmaker() as session:
session.query(Student).filter(Student.name == 'Jenny').delete()
# or when purging the whole Student table
session.query(Student).delete()
Am I missing something? Or maybe I handle the many-to-many relation not as intended?
class Student(Base):
__tablename__ = 'student'
student_id = Column(Integer, primary_key=True)
name = Column(String(127))
surname = Column(String(127))
grades = relationship('Grade', back_populates='student', uselist=True)
classes = relationship('Class', secondary='student_class_link', overlaps='classes')
class Grade(Base):
__tablename__ = 'grade'
id = Column(Integer, primary_key=True)
student_id = Column(Integer, ForeignKey('student.student_id'))
grade = Column(SmallInteger)
student = relationship('Student', back_populates='grades', uselist=False)
class Class(Base):
__tablename__ = 'class'
class_name = Column(String(31), primary_key=True)
students = relationship('Student', secondary='student_class_link', overlaps='classes')
class StudentClassLink(Base):
__tablename__ = 'student_class_link'
student_id = Column(Integer, ForeignKey('student.student_id'), primary_key=True)
class_name = Column(String(31), ForeignKey('class.class_name'), primary_key=True)