在项目开发过程中,会遇到很多数据之间多对多关系的情况,比如:

  • 学生网上选课(学生和课程)
  • 老师与其授课的班级(老师和班级)
  • 用户与其收藏的新闻(用户和新闻)
  • 等等…

所以在开发过程中需要使用 ORM 模型将表与表的多对多关联关系使用代码描述出来。多对多关系描述有一个唯一的点就是:需要添加一张单独的表去记录两张表之间的对应关系

需求分析

  • 学生可以网上选课,学生有多个,课程也有多个
  • 学生有:张三、李四、王五
  • 课程有:物理、化学、生物

选修关系有:

  • 张三选修了化学和生物
  • 李四选修了化学
  • 王五选修了物理、化学和生物

需求:

  • 查询某个学生选修了哪些课程
  • 查询某个课程都有哪些学生选择

思路分析

  • 用一张表来保存所有的学生数据
  • 用一张表来保存所有的课程数据
  • 用一张中间表表示学生与课程的对应关系

结构图如下:

course_student.py
"""
多对多关系
案例: 学生和课程
"""
from flask import Flask
from flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)# 1.设置数据库的配置信息
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:123456@localhost:3306/test"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False# 2.创建Sqlalchemy对象,关联app
db = SQLAlchemy(app)# 3.编写模型类# 中间表
tb_student_course = db.Table("tb_student_course",db.Column("student_id", db.Integer, db.ForeignKey("students.id")),db.Column("course_id", db.Integer, db.ForeignKey("courses.id"))
)# 学生
class Student(db.Model):__tablename__ = "students"id = db.Column(db.Integer, primary_key=True, autoincrement=True)name = db.Column(db.String(32))# 关系属性secondary: 使用在多对多种,用来表示二次查询的courses = db.relationship("Course", backref="students", secondary="tb_student_course")# 为了方便输出对象查看,重写__repr__方法def __repr__(self):return "<Student:%s>" % self.name# 课程
class Course(db.Model):__tablename__ = "courses"id = db.Column(db.Integer, primary_key=True, autoincrement=True)name = db.Column(db.String(32))# 为了方便输出对象查看,重写__repr__方法def __repr__(self):return "<Student:%s>" % self.name@app.route('/')
def hello_world():return "helloworld"if __name__ == '__main__':# 为了演示方便,先删除,后创建db.drop_all()db.create_all()# 添加测试数据stu1 = Student(name='张三')stu2 = Student(name='李四')stu3 = Student(name='王五')cou1 = Course(name='物理')cou2 = Course(name='化学')cou3 = Course(name='生物')stu1.courses = [cou2, cou3]stu2.courses = [cou2]stu3.courses = [cou1, cou2, cou3]db.session.add_all([stu1, stu2, stu2])db.session.add_all([cou1, cou2, cou3])db.session.commit()app.run(debug=True)

测试:

In [1]: from course_student import *In [2]: stu=Student.query.get(1)In [3]: stu
Out[3]: <Student:张三>In [4]: stu.courses
Out[4]: [<Student:化学>, <Student:生物>]In [5]: course=Course.query.get(1)In [6]: course
Out[6]: <Student:化学>In [7]: course.students
Out[7]: [<Student:张三>, <Student:李四>, <Student:王五>]

Flask一对多学生课程表项目搭建相关推荐

  1. Hadoop+hive+flask+echarts大数据可视化项目之hive环境搭建与系统数据的分析思路

    Hadoop+hive+flask+echarts大数据可视化项目(四) --------------hive环境搭建与系统数据的分析思路---------------- 关注过Hadoop+hive ...

  2. Hadoop+hive+flask+echarts大数据可视化项目之系统数据整合和hadoop环境搭建

    Hadoop+hive+flask+echarts大数据可视化项目(二) --------------系统数据整合和hadoop环境搭建---------------- 关注Hadoop+Hive+F ...

  3. 85-分布式项目搭建

    分布式项目搭建 页面原型展示 : 技术选型 : 前端技术选型 : 后端技术选型 (有些可能并没有用到): 项目开发环境 : 开发工具: 后端:IDEA 2019 前端:VS code 数据库客户端工具 ...

  4. 移动物联网项目搭建(一)——起步

    移动物联网项目搭建(一) 项目背景意义 项目规划 项目目标(初级) 项目所需硬件设备 项目实现准备 项目传送门 前言 本项目是我本人在2019年7月也就是大二暑假所做的一个云端通信新手训练项目,阿里云 ...

  5. web全栈开发项目搭建整体思路和学习路线

    web全栈开发 全栈开发技术介绍: 全栈技术指可以完整整个项目搭建的有效集合. 包括:网站的设计,web前端开发,web后端开发,数据库设计,接口和组件,移动端开发,产品设计,系统架构,产品的理念和用 ...

  6. 魔方APP项目-01-移动端开发相关概念、移动端自适配、元信息(meta)、开发准备、移动端项目搭建(模拟器调试)、APICloud(APICloud 前端框架,获取服务端API接口)

    一.移动端开发相关概念 1.APP类型 ①.Native APP Native APP又称原生APP,就是我们平时说的手机应用软件. 原生APP 是针对IOS.Android.Windows等不同的手 ...

  7. 谷粒学苑-项目搭建、讲师前后端、课程分类前后端、OSS、EasyExcel

    谷粒学苑 url: jdbc:mysql://localhost:3306/guli?useUnicode=true&useSSL=false&characterEncoding=UT ...

  8. Hadoop+hive+flask+echarts大数据可视化项目之flask结合echarts前后端结合显示hive分析结果

    Hadoop+hive+flask+echarts大数据可视化项目(五) ------flask与echarts前后端结合显示hive分析结果------- 关注过Hadoop+hive+flask+ ...

  9. 2003京淘项目Day-03京淘后台项目搭建

    1.SpringBoot 整合JSP 1.1 创建项目 1.1.1 创建项目 1.1.2 编辑POM.xml文件 添加继承/依赖/插件 <!--parent标签作用:管理所有被springBoo ...

最新文章

  1. hdu3746 KMP的next数组应用,求项链首尾项链循环
  2. f2py支持在fortran语言中调用其他Fortran函数或C代码或Python代码
  3. jsp stc_为什么说jsp的本质是servlet?
  4. LeetCode 605. 种花问题
  5. Linux与Windows共享文件夹之samba的安装与使用 资源管理器直接查看服务器文件
  6. 苹果收购人工智能初创公司Voysis以改善语音助手Siri功能
  7. Makefile:跟我一起学makefile
  8. 51nod 1243 排船的问题(二分)
  9. 浏览器href自动解析uri(执行urldecode)
  10. EChart:EChart与NProgress结合异步加载数据
  11. JavaScript设计模式与实践--工厂模式
  12. Unity编辑器:自定义编辑器样式——GUIStyle
  13. windows 使用 tree 命令显示目录和文件
  14. 常见HTTP错误码模拟
  15. lamp一键安装包不安装mysql_lamp一键安装包的一些注意点
  16. 儿童python编程入门-青少年Python编程入门 PDF 超清版
  17. 手机计算机16进制,16进制计算器安装方法 16进制计算器使用技巧
  18. 山地车的结构及骑行注意事项
  19. 超级详细的IDC搭建教程
  20. 请教淘宝API sign签名问题,望高人指点!谢谢!

热门文章

  1. 学编程必须要知道的开发工具和软件,都在这里
  2. 结合NGUI做的手机拍照(可自定义相框)
  3. 第十二章实操篇Linux磁盘分区、挂载
  4. hexo搭建自己的博客并部署至免费的github服务器教程
  5. Linux中挂载详解以及mount命令用法
  6. 读陈黎娟的《C、C++实践进阶之道,写给程序员的编程书》--关于字符和字符串、函数
  7. MM玩家:没有玩过魔兽的没资格评价是非
  8. 新疆维吾尔自治区大数据技术与应用大赛2022
  9. 计算机管理无法定位程序输入点,Word竟然“无法定位程序输入点 GetDateFormatEx”!...
  10. 第18章 HTML5动画设计