当前位置: 芃睿知识网 > 建站常见问题

flask 模型中外键查询一对一和多对多如何实现

时间:2021年11月01日 17:23   作者:知识网   出处:原创

1.一对多

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.多对多

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

看了该文章的用户还看了

Flask SQLAlchemy 调用数据库数据返回到前端html显示问题
Flask SQLAlchemy 调用数据库数据返回到前端html显示问题

这个在我们的web开发中也经常需要调用数据库的数据到前端去显示出来,特别是文章类的,会带有大量的html代码,这个时候展

flask自定义错误页面404,500方法
flask自定义错误页面404,500方法

网上看了很多关于nginx配置错误页面404,500页面的方法,拿到实际flask项目中一个都不能用, 比如最常见的是

flask如何配置访问robots.txt和sitemap.xml
flask如何配置访问robots.txt和sitemap.xml

使用flask把网站做好了,但是为了优化需要添加robots.txt和sitemap.xml文件,将其放入根目录,提示4

python flask 读取文本时不换行怎么办
python flask 读取文本时不换行怎么办

python flask 读取文本时不换行怎么办,接触flask不久,用flask写了一个超级小网站,因为数据太少所以暂

flask如何把数据库里的html格式输出到前端
flask如何把数据库里的html格式输出到前端

只需要在调取标签的后面加上|safe即可将html解析出来了,如果不加将会html的代码直接显示出来。

flask Jinja2迭代Python中的list列表和dict字典
flask Jinja2迭代Python中的list列表和dict字典

经常使用flask Jinja2迭代Python中的list列表和dict字典,总是忘记,记录下

Flask jinja2模板中if条件语句如何使用
Flask jinja2模板中if条件语句如何使用

if条件判断语句必须放在{% if statement %}中间,并且还必须有结束的标签{% endif %}

flask filter如何实现or的功能
flask filter如何实现or的功能

flask fliter过滤是数据提取的一个很重要的功能,我们都知道and用逗号就可以实现,那么or的功能应该如何实现呢

flask中条件查询filter和filter_by的区别
flask中条件查询filter和filter_by的区别

filter和filter_by区别:接收的参数类型不一样

flask如何关闭csrf验证
flask如何关闭csrf验证

flask本身是没有集成csrf的,所以要使用csrf必须使用from flask_wtf.csrf import CS

发表高见 (请对您的言行负责)
2021年11月01日 17:25,回答 by_淘气宝宝:
一对多用的比较多,也很实用,nullable是可选字段,可以不写的
©芃睿知识网 版权所有2021-2022 www.shsongjiang.com