sqlalchemy-many

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)

 

Guess you like

Origin www.cnblogs.com/wt7018/p/11617848.html