簡體   English   中英

如何在SQLAlchemy(Python,Flask)數據庫模型的構造函數中設置外鍵?

[英]How do I set a foreign key in the constructor of a SQLAlchemy (Python, Flask) db model?

例如,我有2個模型:一個學生,一個老師。
我是否必須在構造函數self.teacher_id = teacher_id添加到Student?

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

由於一個學生有很多老師,一個老師有很多學生,因此它具有多對多關系,因此您需要添加一個關聯表來做到這一點:

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將自動為反向關系使用相同的輔助參數。 因此,您不必在兩個類中都放上關系語句

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM