[英]How do I make SQLAlchemy set values for a foreign key by passing a related entity in the constructor?
[英]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.teachers
和Teacher.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.