First, the table relationships
class Student(Base): __tablename__ = 'student' id = Column(Integer, primary_key=True) name = Column(String(32), index=True, nullable=False) course_list = relationship('Course', secondary='student2course', backref='student_list') class Course(Base): __tablename__ = 'course' id = Column(Integer, primary_key=True) title = Column(String(32), index=True, nullable=False) class Student2Course(Base): __tablename__ = 'student2course' id = Column(Integer, primary_key=True, autoincrement=True) student_id = Column(Integer, ForeignKey('student.id')) course_id = Column(Integer, ForeignKey('course.id')) __table_args__ = ( UniqueConstraint('student_id', 'course_id', name='uix_stu_cou ' ), # co-unique index # Index (' ix_id_name ',' name ',' Extra '), # joint index )
Note: To create a third table their own
Second, the operating data
# 1. Create a program, create two students, two students choose courses newly created. = Course, obj (title = ' English ' ) obj.student_list = [Student (name = ' B ' ), Student (name = ' C ' )] session.add (obj) Session.commit () # 2. three tables the Join RET = session.query (Student2Course.id, Student.name, Course.title) .join (Student, Student2Course.student_id == Student.id, isouter = True) .join (Course,, Student2Course.course_id == Course.id , isouter = True) .order_by (Student2Course.id.asc ()) for Row in RET: Print (Row) # 3. "a" selected all classes # 原生 ret = session.query(Student2Course.id,Student.name,Course.title).join(Student,Student2Course.student_id==Student.id,isouter=True).join(Course,Student2Course.course_id==Course.id,isouter=True).filter(Student.name=='a').order_by(Student2Course.id.asc()).all() print(ret) # relation obj = session.query(Student).filter(Student.name=='a').first() for item in obj.course_list: print(item.title) # 4. 选了“生物”的所有人 obj = session.query(Course).filter(Course.title=='生物').first() for item in obj.student_list: print(item.name)