Flask—06-理解掌握flask数据模型(02)
数据模型
模型关系
- 一对多(使用最多)
- 一:学生(Student)
- 需要添加反向引用
- 多:文章(Article)
- 需要添加外键关联
- 一:学生(Student)
- 一对一
- 一:学生(Student),主表
- 需要添加反向引用,在一对多的情况下多指定属性
userlist=False即可
- 需要添加反向引用,在一对多的情况下多指定属性
- 一:详情(Profile),次表
- 需要添加外键关联
- 一:学生(Student),主表
- 多对多
- 多:学生(Student)
- 需要添加反向引用
- 添加反向引用时需要通过
secondary指定中间关联表 - 设置反向引用的查询时机,可以通过
db.backref完成
- 多:课程(Course)
- 中间关联表:学生选课表,不需要进行操作和维护
- 字段:表名、外键关联
- 多:学生(Student)
模型总结
等价查询
@app.route('/query/')
def query():
# students = Student.query.all()
# 等价于
students = db.session.query(Student).all()
return ','.join(s.name for s in students)
指定字段查询
@app.route('/select/')
def select():
# ret = db.session.query(Student.id, Student.name).all()
# 指定字段查询,等价于上式
ret = Student.query.with_entities(Student.id, Student.name).all()
# 返回指定字段组成的元组构成的列表
print(ret)
return '查询结束'
分页查询:paginate,项目中讲解。
查看SQL日志:就是查看执行过的SQL语句。
# 记录SQL日志,需要满足以下三个条件中的任意一个即可
# app.config['DEBUG'] = True
# app.config['TESTING'] = True
app.config['SQLALCHEMY_RECORD_QUERIES'] = True from flask_sqlalchemy import get_debug_queries queries = get_debug_queries()
for q in queries:
print(q)
数据缓存
说明:
数据库的速度是一个web应用的性能瓶颈,因此,为了提高访问效率,应该尽可能减少数据库的访问。可以将经常访问的数据缓存起来,每次访问时先从缓存中获取数据,若有直接返回;没有再从数据库中读取。
flask-cache:专门负责数据缓存的扩展。
安装:
pip install flask-cache使用:
from flask_cache import Cache # 配置
# 缓存类型
app.config['CACHE_TYPE'] = 'redis'
# 主机
app.config['CACHE_REDIS_HOST'] = '127.0.0.1'
# 端口
app.config['CACHE_REDIS_PORT'] = 6379
# 数据库
app.config['CACHE_REDIS_DB'] = 1 # 创建对象
cache = Cache(app, with_jinja2_ext=False)
缓存视图函数:
@app.route('/')
# timeout:指定缓存有效期,默认300s
# key_prefix:缓存键前缀,默认:view/ + 路由地址
@cache.cached(timeout=100, key_prefix='index')
def index():
print('读取数据库')
return '有效数据'
缓存普通函数:
# 缓存普通函数,key_prefix必须指定
@cache.cached(timeout=100, key_prefix='common')
def common():
print('查询数据库')
return '返回的数据' @app.route('/hello/')
def hello():
return common()
清除缓存
@app.route('/clear/')
def clear():
# 指定删除
# cache.delete('index')
# 全部清空
cache.clear()
return '缓存已清除'
自定义缓存
@app.route('/zidingyi/')
def zidingyi():
# 先从缓存中获取
data = cache.get('zidingyi_data')
if data:
return data
# 没有缓存数据
print('从数据库中获取数据')
data = '123456'
# 缓存数据
cache.set('zidingyi_data', data, timeout=100)
return data
Flask—06-理解掌握flask数据模型(02)的更多相关文章
- Flask 框架理解(一)
Flask 框架理解(一) web 服务器 , web 框架 以及 WSGI 这里说的 web 服务器特指纯粹的 python HTTP 服务器(比如 Gunicorn,而不是 Apache,Ngin ...
- python 全栈开发,Day142(flask标准目录结构, flask使用SQLAlchemy,flask离线脚本,flask多app应用,flask-script,flask-migrate,pipreqs)
昨日内容回顾 1. 简述flask上下文管理 - threading.local - 偏函数 - 栈 2. 原生SQL和ORM有什么优缺点? 开发效率: ORM > 原生SQL 执行效率: 原生 ...
- Flask最强攻略 - 跟DragonFire学Flask - 第六篇 Flask 中内置的 Session
Flask中的Session非常的奇怪,他会将你的SessionID存放在客户端的Cookie中,使用起来也非常的奇怪 1. Flask 中 session 是需要 secret_key 的 from ...
- Flask最强攻略 - 跟DragonFire学Flask - 第四篇 Flask 中的模板语言 Jinja2 及 render_template 的深度用法
是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符 ...
- 使用Flask+uwsgi+Nginx部署Flask正式环境
环境准备 在开始正式讲解之前,我们将首先进行环境准备. Step1:安装Python,pip以及nginx: sudo apt-get update sudo apt-get install pyth ...
- Flask 入门一( flask 框架和 flask-script 库)
Flask 入门一( flask 框架 和 flask-script 库) 一.Flask框架: 1.简介 Flask是一个非常小的Python Web框架,被称为微型框架:只提供了一个稳健的核心,其 ...
- 初识Flask框架,以及Flask中的模板语言jinjia2和Flask内置的Session
一.web框架的对比 首先我们先来看下比较火的web框架 1.Django: 优点:大而全,所有组件都是组织内部开发高度定制化,教科书级别的框架 缺点:大到浪费资源,请求的时候需要的资源较高 2.Fl ...
- Flask(3)- flask中的CBV、werkzeug+上下文初步解读、偏函数和线程安全
一.flask中的CBV 对比django中的CBV,我们来看一下flask中的CBV怎么实现? from flask import Flask, render_template, url_for, ...
- 第七篇 Flask实例化配置及Flask对象配置
一.Flask对象的配置 Flask 是一个非常灵活且短小精干的web框架 , 那么灵活性从什么地方体现呢? 有一个神奇的东西叫 Flask配置 , 这个东西怎么用呢? 它能给我们带来怎么样的方便呢? ...
- flask 第六篇 flask内置的session
Flask中的Session非常的奇怪,他会将你的SessionID存放在客户端的Cookie中,使用起来也非常的奇怪 1. Flask 中 session 是需要 secret_key 的 from ...
随机推荐
- 分布式环境Tomcat多节点集群下共享目录配置,tomcat虚拟目录+nfs
我们可能有这种场景: 集群环境下,多个web容器需要请求一个共享目录下的文件,比如保存图片或者录音文件,任意一个节点保存后其他节点需要及时获取,此时就需要目录进行同步了,否则Nginx负载到任意一个节 ...
- 科学计算基础包——Numpy
一.NumPy简介 NumPy是高性能科学计算和数据分析的基础包.它是pandas等其他各种工具的基础. 1.NumPy的主要功能 (1)ndarray:一个多维数组结构,高效且节省空间. (2)无需 ...
- PHP正则表达式实例汇总
$str = preg_replace("/(<a.*?>)(.*?)(<\/a>)/", '\1<span class="link&quo ...
- CSS深入理解学习笔记之border
1.border-width border-width为何不支持百分比:语义和使用场景决定的,现实中各种边框本身的概念就不存在百分比的使用方法. border-width支持关键字:thin.medi ...
- vuejs+axios发送请求
Vue 原本有一个官方推荐的 ajax 插件 vue-resource,但是自从 Vue 更新到 2.0 之后,官方就不再更新 vue-resource 目前主流的 Vue 项目,都选择 axios ...
- jsp九大内置对象==欣欣
内置对象特点: 1. 由JSP规范提供,不用编写者实例化. 2. 通过Web容器实现和管理 3. 所有JSP页面均可使用 4. ...
- vuejs的双向数据绑定实现原理——object.defineproperty()
视图和数据变化绑定 而vue.js主要利用了accessor descriptors的set和get来更新视图,这里看到的这个例子挺好,是一个简单的绑定.对于一个html页面 <div> ...
- office转换为html在线预览
/// <summary> /// word 转换为html /// </summary> /// <param name="path">要转换 ...
- CSS3中的变形与动画(一)
CSS3变形篇 旋转rotate() 旋转rotate()函数通过指定的角度参数使元素相对原点进行旋转.它主要在二维空间内进行操作,设置一个角度值,用来指定旋转的幅度.如果这个值为正值,元素相对原点中 ...
- VB6.0环境下的CATIA二次开发简介
CATIA作为CAD/CAE/CAM/PDM一体化的软件,广泛用于航空航天.汽车.船舶及电子工业,尤其在航空航天业,有八成以上厂商使用CATIA的市场[11].然而由于使用习惯和使用的侧重点不用,功能 ...