0

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)

python_user
  • 5,375
  • 2
  • 13
  • 32
Pall Arpad
  • 1,625
  • 16
  • 20

0 Answers0