霍格沃兹测试开发学社 ceshiren.com
# 班级表
class ClassInfo(db.Model):
__tablename__ = "Class"
id = Column(Integer, primary_key=True)
name = Column(String(80))
# 学生表
class StudentInfo(db.Model):
# 指定表名__tablename__属性
__tablename__ = "Student"
id = Column(Integer, primary_key=True)
name = Column(String(80))
classid = Column(Integer, ForeignKey("Class.id"))
# ====== 数据新增 ======
# Class 班级表:添加两条数据
class1 = ClassInfo(id=1,classname="测开21期")
class2 = ClassInfo(id=2,classname="测开22期")
session.add_all([class1,class2])
session.commit()
# Student 学生表:添加两条数据
student1 = StudentInfo(id=1,username="学生一",class_id=1)
student2 = StudentInfo(id=2, username="学生二", class_id=1)
student3 = StudentInfo(id=3, username="学生三", class_id=2)
student4 = StudentInfo(id=4, username="学生四", class_id=2)
session.add_all([student3,student4])
session.commit()
session.close()
class StudentInfo(db.Model):
# 指定表名__tablename__属性
__tablename__ = "Student"
id = Column(Integer, primary_key=True)
name = Column(String(80))
classid = Column(Integer, ForeignKey("Class.id"))
##### 添加代码 ######
# 第一个参数:表示这个关系的另一端是 ClassInfo 类。比如班级id=1
# 第二个参数:backref, 表示反向引用,需要从班级id为1 反向获取【多】的时候,使用的属性
classinfo = db.relationship("ClassInfo", backref="studentinfo")
# ====== 数据修改 ======
# 由一改多 数据修改
class1 = ClassInfo.query.filter_by(id=1).first()
print(class1.studentinfo[0].name)
class1.studentinfo[0].name = "学生一修改1"
session.commit()
session.close()
# 由多改一
stu1 = StudentInfo.query.filter_by(id=1).first()
print(stu1.classinfo.name)
stu1.classinfo.name = "测开21期修改1"
session.commit()
session.close()
# ====== 数据删除 ======
# 删除用的很少,几乎不用,了解即可
# 删除一个班级下所有的学生
class1 = ClassInfo.query.filter_by(id=1).first()
print(StudentInfo.classid)
# 注意这里用的是filter 不是filter_by
StudentInfo.query.filter( StudentInfo.classid==class1.id).delete()
session.commit()
session.close()
# 删除之后查询结果
print(StudentInfo.query.all())