2017-08-05 54 views
0

例如,我有2個模型:,一個學生和一個老師。
我必須在構造函數self.teacher_id = teacher_id中添加到學生嗎?如何在SQLAlchemy(Python,Flask)db模型的構造函數中設置外鍵?

class Student(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.Text) 
    age = db.Column(db.Integer) 
    teacher_id = db.Column(db.Integer, db.ForeignKey('teacher.id')) 
    def __init__(self, name, age): 
     self.name = name 
     self.age = age 

class Teacher(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    subject = db.Column(db.Text) 
    students = db.relationship('Student', backref='person', lazy='dynamic') 
    def __init__(self, subject): 
     self.subject = subject 

回答

0

由於一個學生有許多老師和一個老師有很多學生來說,它是一個許多一對多的關係,你需要添加一個關聯表做到這一點:

class Student(db.Model): 
    __tablename__ = 'student' 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.Text) 
    age = db.Column(db.Integer) 
    teachers = db.relationship('Teacher', secondary='xtable', backref=db.backref('students', lazy='dynamic')) 

class Teacher(db.Model): 
    __tablename__ = 'teacher' 
    id = db.Column(db.Integer, primary_key=True) 
    subject = db.Column(db.Text) 

class Xtable(db.Model): 
    __tablename__ = 'xtable' 
    student_id = db.Column('student_id', db.ForeignKey('student.id')) 
    teacher_id = db.Column('teacher_id', db.ForeignKey('teacher.id')) 

現在你應該能夠查詢Student.teachersTeacher.students

文檔:http://docs.sqlalchemy.org/en/latest/orm/basic_relationships.html#many-to-many

*注意使用backref段時米而不是relationship.back_populates,backref會自動使用相同的次要參數來表示反向關係。 因此,您不必將關係說明放在兩個類別

相關問題