Flask 中的一对多和多对多

1.ForeignKey

class Students(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    s_name = db.Column(db.String(20), unique=False, nullable=False)
    s_age = db.Column(db.Integer, default=18)
    s_g = db.Column(db.Integer, db.ForeignKey('grade.id'), nullable=True)
class Grade(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    g_name = db.Column(db.String(30), unique=True, nullable=False)
    students = db.relationship('Students', backref='grade')
    __tablename__ = 'grade'

flsk中的一对多

在多的一方需要写一个字段s_g 在其中写上db.ForeignKey('grade.id'),参数为一对多的一的一方的主键。这个字段在数据库中是不存在的。

在少的一方需要添加一个relationship字段 students = db.relationship('Students', backref='grade') ,

backref为反向查询的关键字

查询:

  • 正向查询(一查多)

    stus = Grade.query.get(id).students
    
  • 反向查询(多查一)

    the_grade = Student.query.get(id).grade
    

2.ManyToMany

class Students(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    s_name = db.Column(db.String(20), unique=False, nullable=False)
    s_age = db.Column(db.Integer, default=18)
    s_g = db.Column(db.Integer, db.ForeignKey('grade.id'), nullable=True)
class Course(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    c_name = db.Column(db.String(10), unique=True, nullable=False)
    students = db.relationship('Students', secondary='s_c', backref='cou')
    __tablename__ = 'course'

中间表:

s_c = db.Table('s_c',
               db.Column('s_id', db.Integer, db.ForeignKey('students.id'), primary_key=True),
               db.Column('c_id', db.Integer, db.ForeignKey('course.id'), primary_key=True),
               )

多对多可以在任意一方中添加一个relationship字段,第一个参数为关联的另外一个表,第二个参数为中间表的表名,第三个参数backref是反向查询时的关键字

在flask中多对多的中间表需要自己建立。建立的中间表的类为db.Table(),第一个参数为中间表的表名,然后在表中添加两个字段,这两个字段分别为关联的两个表的一对多的外键,也同为主键。

查询

  • 正向查询(写有relationship的一边查另外一边)

    stus = Course.query.get(id).students
    
  • 反向查询

    grade = Students.query.get(id).cou
    
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、配置SQLAlchemy 1.安装包 2.配置数据库 a)配置SQLALCHEMY_DATABASE_URI ...
    kris_lp阅读 9,770评论 0 5
  • flask使用操作指南1 1. flask介绍 Flask是一个基于Python实现的web开发的'微'框架 中文...
    文化银儿阅读 17,316评论 4 18
  • 摘录 软件工程师不能只会开发软件,应该要成为这个业务领域的专家 做团队中最差的(指的是找一个团队,团队中的人都比你...
    无杂货阅读 3,150评论 0 0
  • 前天闺蜜来看我。给我带了一条非常璀璨的施华洛世奇发箍。闺蜜知道我对闪闪的东西转不开眼,这一款价值应该是1000以上...
    思埠文君阅读 1,820评论 0 4
  • 生活在纷杂世界中的人们,总是处于各种情况之下的摇摆中,想外出旅游,却总觉得外面的世界不安全,那么外面的景色你何时才...
    irene906阅读 2,682评论 0 0