1.一对多关系模型

示例代码

  1. class Role(db.Model):
  2. """角色表"""
  3. __tablename__ = 'roles'
  4.  
  5. id = db.Column(db.Integer, primary_key=True)
  6. name = db.Column(db.String(64), unique=True)
  7. users = db.relationship('User', backref='role', lazy='dynamic')
  8.  
  9. class User(db.Model):
  10. """用户表"""
  11. __tablename__ = 'users'
  12. id = db.Column(db.Integer, primary_key=True)
  13. name = db.Column(db.String(64), unique=True, index=True)

2.自关联多对多模型

  • 示例场景

    • 评论与该评论的子评论(评论表)
    • 参考网易新闻

  示例代码

  1. class Comment(db.Model):
  2. """评论"""
  3. __tablename__ = "comments"
  4.  
  5. id = db.Column(db.Integer, primary_key=True)
  6. # 评论内容
  7. content = db.Column(db.Text, nullable=False)
  8. # 父评论id
  9. parent_id = db.Column(db.Integer, db.ForeignKey("comments.id"))
  10. # 父评论(也是评论模型)
  11. parent = db.relationship("Comment", remote_side=[id],
  12. backref=db.backref('childs', lazy='dynamic'))
  13.  
  14. # 测试代码
  15. if __name__ == '__main__':
  16. db.drop_all()
  17. db.create_all()
  18.  
  19. com1 = Comment(content='我是主评论1')
  20. com2 = Comment(content='我是主评论2')
  21. com11 = Comment(content='我是回复主评论1的子评论1')
  22. com11.parent = com1
  23. com12 = Comment(content='我是回复主评论1的子评论2')
  24. com12.parent = com1
  25.  
  26. db.session.add_all([com1, com2, com11, com12])
  27. db.session.commit()
  28. app.run(debug=True)

3.多对多关系模型

  • 示例场景

    • 讲师与其上课的班级(讲师表与班级表)
    • 用户与其收藏的新闻(用户表与新闻表)
    • 学生与其选修的课程(学生表与选修课程表)

  示例代码

  1. tb_student_course = db.Table('tb_student_course',
  2. db.Column('student_id', db.Integer, db.ForeignKey('students.id')),
  3. db.Column('course_id', db.Integer, db.ForeignKey('courses.id'))
  4. )
  5.  
  6. class Student(db.Model):
  7. __tablename__ = "students"
  8. id = db.Column(db.Integer, primary_key=True)
  9. name = db.Column(db.String(64), unique=True)
  10.  
  11. courses = db.relationship('Course', secondary=tb_student_course,
  12. backref=db.backref('students', lazy='dynamic'),
  13. lazy='dynamic')
  14.  
  15. class Course(db.Model):
  16. __tablename__ = "courses"
  17. id = db.Column(db.Integer, primary_key=True)
  18. name = db.Column(db.String(64), unique=True)

4.自关联多对多关系模型

  • 示例场景

    • 用户关注其他用户(用户表,中间表)
  • 示例代码

  1. tb_user_follows = db.Table(
  2. "tb_user_follows",
  3. db.Column('follower_id', db.Integer, db.ForeignKey('info_user.id'), primary_key=True), # 粉丝id
  4. db.Column('followed_id', db.Integer, db.ForeignKey('info_user.id'), primary_key=True) # 被关注人的id
  5. )
  6.  
  7. class User(db.Model):
  8. """用户表"""
  9. __tablename__ = "info_user"
  10.  
  11. id = db.Column(db.Integer, primary_key=True)
  12. name = db.Column(db.String(32), unique=True, nullable=False)
  13.  
  14. # 用户所有的粉丝,添加了反向引用followed,代表用户都关注了哪些人
  15. followers = db.relationship('User',
  16. secondary=tb_user_follows,
  17. primaryjoin=id == tb_user_follows.c.followed_id,
  18. secondaryjoin=id == tb_user_follows.c.follower_id,
  19. backref=db.backref('followed', lazy='dynamic'),
  20. lazy='dynamic')

flask 常用数据模型模板的更多相关文章

  1. Flask常用扩展(Extentions)

    Flask常用扩展(Extentions) 官网;http://flask.pocoo.org/extensions/ 1.Flask-Script ​ 说明: 一个flask终端运行的解析器 安装: ...

  2. linux: 几个常用makefile模板

    不才,总结个人常用makefile模板,以备后用. 1.编译动态库 ############################################################# # Ma ...

  3. flask中jinjia2模板引擎使用详解1

    在之前的文章中我们介绍过flask调用jinja2模板的基本使用,这次我们来说一下jinjia2模板的使用 Jinja2 在其是一个 Python 2.4 库之前,被设计 为是灵活.快速和安全的. 模 ...

  4. flask中jinjia2模板引擎详解4

    接上文 For循环 和其它编程语言一样,for用来编辑列表中的项.下面以一个例子来说明for在flask的jinjia2模板中的使用. 创建一个模板list.html 代码如下{% extends & ...

  5. flask中jinjia2模板引擎使用详解5

    接上文 宏 可以理解为函数,即把一些常用的模板片段做好封装,以便于重用,减少工作量和维护难度. 宏的定义很简单: {%macro xxx()%} ##这里写内容 {%endmacro%}   下面引用 ...

  6. Django常用的模板标签

    django 目前了解的各个文件的作用: manage.py:  运行服务 urls: 路由 views: 处理数据 传递给 html模板 html文件:  通过 {{变量名}}接收变量 通过 模板标 ...

  7. Flask 的 template模板 与 jinja2语法

    Flask 的 template模板 与 jinja2语法 Flask使用的是Jinja2模板,所以其语法和Django基本无差别 1.模板基本数据的渲染 变量 {{..}} 列表 {% for it ...

  8. flask之jinja2模板语言

    一.jinja2简单介绍 Jinja2是Python里一个被广泛应用的模版引擎,他的设计思想来源于Django的模板引擎,并扩展了其语法和一系列强大的功能.其中最显著的一个是增加了沙箱执行功能和可选的 ...

  9. 织梦(dede)底层模板概念、常用底层模板字段

    织梦(dede)底层模板概念.常用底层模板字段 一.底层模板的概念以及调用方式: 1. 什么是底层模板? 底层模板不是一个模板! 他就是在实际页面当中所要显示的具体内容: 2. 底层模板的应用: 调用 ...

随机推荐

  1. DAC

    DAC的功能:可以输出电压(无触发,设置DAC转换值,DAC使能更新寄存器和启动转换)或者波形(连续转换,用DMA发送数据,定时器触发).首先有个正弦波波形的数组,内存到DAC的DMA通道不断的将正弦 ...

  2. 技术|Android安装包极限优化

    版权声明 1.本文版权归原作者所有,转载需注明作者信息及原文出处. 2.本文作者:赵裕(vimerzhao),永久链接:https://github.com/vimerzhao/vimerzhao.g ...

  3. 「CF1004E」Sonya and Ice Cream

    题目描述 给定一个 \(N\) 个点的树,要选出一条所含点的个数不超过 \(K\) 的一条路径,使得路径外的点到这条路径的距离的最大值最小. 数据范围:\(1\le K \le N \le 10^5\ ...

  4. Java最新面试题

    本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...

  5. php 增删改查范例(2)

    增加页面add.php: <!DOCTYPE html><html lang="en"><head>    <meta charset=& ...

  6. mmap 与 munmap

    功能描述 mmap(memory map) 将一个文件或其他对象映射进内存. 文件被映射到多个page上, 若文件的大小不是所有page的大小之和, 最后一个page不被使用的空间将会被清零. mum ...

  7. D. Number Of Permutations 符合条件的排列种类

    D. Number Of Permutations time limit per test 2 seconds memory limit per test 256 megabytes input st ...

  8. css 盒子模型简介

    盒子模型 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...

  9. 第1节 kafka消息队列:3、4、kafka的安装以及命令行的管理使用

    6.kafka的安装 5.1三台机器安装zookeeper 注意:安装zookeeper之前一定要确保三台机器时钟同步 */1 * * * * /usr/sbin/ntpdate us.pool.nt ...

  10. tcpdump 抓取MySQL SQL语句脚本

    #!/bin/bash#this script used montor mysql network traffic.echo sqltcpdump -i bond0 -s 0 -l -w - dst ...