flask 常用数据模型模板
1.一对多关系模型
示例代码
- class Role(db.Model):
- """角色表"""
- __tablename__ = 'roles'
- id = db.Column(db.Integer, primary_key=True)
- name = db.Column(db.String(64), unique=True)
- users = db.relationship('User', backref='role', lazy='dynamic')
- class User(db.Model):
- """用户表"""
- __tablename__ = 'users'
- id = db.Column(db.Integer, primary_key=True)
- name = db.Column(db.String(64), unique=True, index=True)
2.自关联多对多模型
- 示例场景
- 评论与该评论的子评论(评论表)
- 参考网易新闻
示例代码
- class Comment(db.Model):
- """评论"""
- __tablename__ = "comments"
- id = db.Column(db.Integer, primary_key=True)
- # 评论内容
- content = db.Column(db.Text, nullable=False)
- # 父评论id
- parent_id = db.Column(db.Integer, db.ForeignKey("comments.id"))
- # 父评论(也是评论模型)
- parent = db.relationship("Comment", remote_side=[id],
- backref=db.backref('childs', lazy='dynamic'))
- # 测试代码
- if __name__ == '__main__':
- db.drop_all()
- db.create_all()
- com1 = Comment(content='我是主评论1')
- com2 = Comment(content='我是主评论2')
- com11 = Comment(content='我是回复主评论1的子评论1')
- com11.parent = com1
- com12 = Comment(content='我是回复主评论1的子评论2')
- com12.parent = com1
- db.session.add_all([com1, com2, com11, com12])
- db.session.commit()
- app.run(debug=True)
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)
- name = db.Column(db.String(64), unique=True)
- courses = db.relationship('Course', secondary=tb_student_course,
- backref=db.backref('students', lazy='dynamic'),
- lazy='dynamic')
- class Course(db.Model):
- __tablename__ = "courses"
- id = db.Column(db.Integer, primary_key=True)
- name = db.Column(db.String(64), unique=True)
4.自关联多对多关系模型
示例场景
- 用户关注其他用户(用户表,中间表)
示例代码
- tb_user_follows = db.Table(
- "tb_user_follows",
- db.Column('follower_id', db.Integer, db.ForeignKey('info_user.id'), primary_key=True), # 粉丝id
- db.Column('followed_id', db.Integer, db.ForeignKey('info_user.id'), primary_key=True) # 被关注人的id
- )
- class User(db.Model):
- """用户表"""
- __tablename__ = "info_user"
- id = db.Column(db.Integer, primary_key=True)
- name = db.Column(db.String(32), unique=True, nullable=False)
- # 用户所有的粉丝,添加了反向引用followed,代表用户都关注了哪些人
- followers = db.relationship('User',
- secondary=tb_user_follows,
- primaryjoin=id == tb_user_follows.c.followed_id,
- secondaryjoin=id == tb_user_follows.c.follower_id,
- backref=db.backref('followed', lazy='dynamic'),
- lazy='dynamic')
flask 常用数据模型模板的更多相关文章
- Flask常用扩展(Extentions)
Flask常用扩展(Extentions) 官网;http://flask.pocoo.org/extensions/ 1.Flask-Script 说明: 一个flask终端运行的解析器 安装: ...
- linux: 几个常用makefile模板
不才,总结个人常用makefile模板,以备后用. 1.编译动态库 ############################################################# # Ma ...
- flask中jinjia2模板引擎使用详解1
在之前的文章中我们介绍过flask调用jinja2模板的基本使用,这次我们来说一下jinjia2模板的使用 Jinja2 在其是一个 Python 2.4 库之前,被设计 为是灵活.快速和安全的. 模 ...
- flask中jinjia2模板引擎详解4
接上文 For循环 和其它编程语言一样,for用来编辑列表中的项.下面以一个例子来说明for在flask的jinjia2模板中的使用. 创建一个模板list.html 代码如下{% extends & ...
- flask中jinjia2模板引擎使用详解5
接上文 宏 可以理解为函数,即把一些常用的模板片段做好封装,以便于重用,减少工作量和维护难度. 宏的定义很简单: {%macro xxx()%} ##这里写内容 {%endmacro%} 下面引用 ...
- Django常用的模板标签
django 目前了解的各个文件的作用: manage.py: 运行服务 urls: 路由 views: 处理数据 传递给 html模板 html文件: 通过 {{变量名}}接收变量 通过 模板标 ...
- Flask 的 template模板 与 jinja2语法
Flask 的 template模板 与 jinja2语法 Flask使用的是Jinja2模板,所以其语法和Django基本无差别 1.模板基本数据的渲染 变量 {{..}} 列表 {% for it ...
- flask之jinja2模板语言
一.jinja2简单介绍 Jinja2是Python里一个被广泛应用的模版引擎,他的设计思想来源于Django的模板引擎,并扩展了其语法和一系列强大的功能.其中最显著的一个是增加了沙箱执行功能和可选的 ...
- 织梦(dede)底层模板概念、常用底层模板字段
织梦(dede)底层模板概念.常用底层模板字段 一.底层模板的概念以及调用方式: 1. 什么是底层模板? 底层模板不是一个模板! 他就是在实际页面当中所要显示的具体内容: 2. 底层模板的应用: 调用 ...
随机推荐
- DAC
DAC的功能:可以输出电压(无触发,设置DAC转换值,DAC使能更新寄存器和启动转换)或者波形(连续转换,用DMA发送数据,定时器触发).首先有个正弦波波形的数组,内存到DAC的DMA通道不断的将正弦 ...
- 技术|Android安装包极限优化
版权声明 1.本文版权归原作者所有,转载需注明作者信息及原文出处. 2.本文作者:赵裕(vimerzhao),永久链接:https://github.com/vimerzhao/vimerzhao.g ...
- 「CF1004E」Sonya and Ice Cream
题目描述 给定一个 \(N\) 个点的树,要选出一条所含点的个数不超过 \(K\) 的一条路径,使得路径外的点到这条路径的距离的最大值最小. 数据范围:\(1\le K \le N \le 10^5\ ...
- Java最新面试题
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...
- php 增删改查范例(2)
增加页面add.php: <!DOCTYPE html><html lang="en"><head> <meta charset=& ...
- mmap 与 munmap
功能描述 mmap(memory map) 将一个文件或其他对象映射进内存. 文件被映射到多个page上, 若文件的大小不是所有page的大小之和, 最后一个page不被使用的空间将会被清零. mum ...
- D. Number Of Permutations 符合条件的排列种类
D. Number Of Permutations time limit per test 2 seconds memory limit per test 256 megabytes input st ...
- css 盒子模型简介
盒子模型 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...
- 第1节 kafka消息队列:3、4、kafka的安装以及命令行的管理使用
6.kafka的安装 5.1三台机器安装zookeeper 注意:安装zookeeper之前一定要确保三台机器时钟同步 */1 * * * * /usr/sbin/ntpdate us.pool.nt ...
- tcpdump 抓取MySQL SQL语句脚本
#!/bin/bash#this script used montor mysql network traffic.echo sqltcpdump -i bond0 -s 0 -l -w - dst ...