Flask sqlalchemy 一對多的關係資料
阿新 • • 發佈:2018-12-11
前幾天已經講了flask sqlalchemy的建立方法,以及最基本的用法,今天來說一下一對多的關係
為了方便測試,使用的是上次修改的程式碼,本次演示的是course和student的關係,一個course可以對應多個student
from config import db class Student(db.Model): __tablename__ = 'student' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(80)) c_id = db.Column(db.Integer, db.ForeignKey('course.id')) # 這裡是用來建立關係的,告訴course的table,外來鍵在這個地方,這個也可以單獨使用 course = db.relationship('Course', backref=db.backref('stu', lazy='dynamic')) # backref是反響代理,下面會給大家演示怎麼用 def __init__(self, name): self.name = name def __repr__(self): return '<User %r>' % self.usernam class Course(db.Model): __tablename = 'course' id = db.Column(db.Integer, primary_key=True) c_name = db.Column(db.String(120)) def __init__(self,c_name): self.c_name = c_name
這裡教大家怎麼使用資料關係的呼叫:
from student import * s1 = Student("Mike") s2 = Student("Jacob") c1 = Course("COMP1531") db.session.add(s1) db.session.add(s2) db.session.add(c1) db.session.commit() # course裡面新增學生,因為我之前設定過反向代理,所以可以直接使用c1.stu.append,大家可以理解為這是個定義過型別的list c1.stu.append(s1) c1.stu.append(s2) db.session.add(c1) db.session.commit() print(s1.course.c_name) # 這裡是檢視所有註冊過這門課的學生 for user in c1.stu: print(user.name)