数据模型

模型关系

  • 一对多(使用最多)

    • 一:学生(Student)

      • 需要添加反向引用
    • 多:文章(Article)
      • 需要添加外键关联
  • 一对一
    • 一:学生(Student),主表

      • 需要添加反向引用,在一对多的情况下多指定属性userlist=False即可
    • 一:详情(Profile),次表
      • 需要添加外键关联
  • 多对多
    • 多:学生(Student)

      • 需要添加反向引用
      • 添加反向引用时需要通过secondary指定中间关联表
      • 设置反向引用的查询时机,可以通过db.backref完成
    • 多:课程(Course)
    • 中间关联表:学生选课表,不需要进行操作和维护
      • 字段:表名、外键关联

模型总结

  • 等价查询

    @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)的更多相关文章

  1. Flask 框架理解(一)

    Flask 框架理解(一) web 服务器 , web 框架 以及 WSGI 这里说的 web 服务器特指纯粹的 python HTTP 服务器(比如 Gunicorn,而不是 Apache,Ngin ...

  2. python 全栈开发,Day142(flask标准目录结构, flask使用SQLAlchemy,flask离线脚本,flask多app应用,flask-script,flask-migrate,pipreqs)

    昨日内容回顾 1. 简述flask上下文管理 - threading.local - 偏函数 - 栈 2. 原生SQL和ORM有什么优缺点? 开发效率: ORM > 原生SQL 执行效率: 原生 ...

  3. Flask最强攻略 - 跟DragonFire学Flask - 第六篇 Flask 中内置的 Session

    Flask中的Session非常的奇怪,他会将你的SessionID存放在客户端的Cookie中,使用起来也非常的奇怪 1. Flask 中 session 是需要 secret_key 的 from ...

  4. Flask最强攻略 - 跟DragonFire学Flask - 第四篇 Flask 中的模板语言 Jinja2 及 render_template 的深度用法

    是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符 ...

  5. 使用Flask+uwsgi+Nginx部署Flask正式环境

    环境准备 在开始正式讲解之前,我们将首先进行环境准备. Step1:安装Python,pip以及nginx: sudo apt-get update sudo apt-get install pyth ...

  6. Flask 入门一( flask 框架和 flask-script 库)

    Flask 入门一( flask 框架 和 flask-script 库) 一.Flask框架: 1.简介 Flask是一个非常小的Python Web框架,被称为微型框架:只提供了一个稳健的核心,其 ...

  7. 初识Flask框架,以及Flask中的模板语言jinjia2和Flask内置的Session

    一.web框架的对比 首先我们先来看下比较火的web框架 1.Django: 优点:大而全,所有组件都是组织内部开发高度定制化,教科书级别的框架 缺点:大到浪费资源,请求的时候需要的资源较高 2.Fl ...

  8. Flask(3)- flask中的CBV、werkzeug+上下文初步解读、偏函数和线程安全

    一.flask中的CBV 对比django中的CBV,我们来看一下flask中的CBV怎么实现? from flask import Flask, render_template, url_for, ...

  9. 第七篇 Flask实例化配置及Flask对象配置

    一.Flask对象的配置 Flask 是一个非常灵活且短小精干的web框架 , 那么灵活性从什么地方体现呢? 有一个神奇的东西叫 Flask配置 , 这个东西怎么用呢? 它能给我们带来怎么样的方便呢? ...

  10. flask 第六篇 flask内置的session

    Flask中的Session非常的奇怪,他会将你的SessionID存放在客户端的Cookie中,使用起来也非常的奇怪 1. Flask 中 session 是需要 secret_key 的 from ...

随机推荐

  1. Video标签事件与属性

    事件与属性 属性 描述 audioTracks 返回可用的音轨列表(MultipleTrackList对象) autoplay 媒体加载后自动播放 buffered 返回缓冲部件的时间范围(TimeR ...

  2. 01.里氏准换与using关键字

    using关键字有什么用?什么是IDisposable? using可以声明namespace的引入,还可以实现非托管资源的释放,实现了IDisposiable的类在using中创建,using结束后 ...

  3. java冒泡排序 常规排序和优化排序

    冒泡排序原理在于两两比较,看你需要把大值放最前面还是最后面, 我们看看把大值放在后面:比如数组[7, 5, 6] 开始排序第1个数字 :7 arr:[7, 5, 6] 开始排序第2个数字 :5 arr ...

  4. Stage2--Python的数据类型

    说在前面: Stage1-Stage4简单介绍一下Python语法,Stage5开始用python实现一些实际应用,语法的东西到处可以查看到,学习一门程序语言的最终目的是应用,而不是学习语法,语法本事 ...

  5. java调用c#dll文件配置

    1 在强大的c#语言和java语言之间,二者难免会因为某些特殊的要求会相互调用. 下面就以java调用c#的dll为例做详细介绍 1  在vs中的环境设置如下图,图片中程序仅作为讲解程序,在项目编译成 ...

  6. 【Linux】动态链接函数库

    动静区别 1. gcc –c mylib.c –o mylib.o 2. gcc -shared -fPIC mylib.o -o libmylib.so 3. 将制作好的libmylib.so 复制 ...

  7. ubuntu14.04安装rabbitmq

      ubuntu14.04安装rabbitmq及配置 1.修改/etc/apt/sources.list文件 命令:vi /etc/apt/sources.list 在最后一行加上:deb http: ...

  8. IntelliJ IDEA搭建SpringBoot的小Demo

    首先简单介绍下Spring Boot,来自度娘百科:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进 ...

  9. 买卖股票的最佳时机 - C++

    class Solution { public: /** * @param prices: Given an integer array * @return: Maximum profit */ in ...

  10. 多线程(四)~数据操作的原子性,使用原子性操作AutomicInteger替换非原子性的i++的操作

    这一章,我们要来验证volatile关键字不是原子性的,OK,还是用代码来说话. ①.线程类,操作i++ 500次 package com.multiThread.thread; publicclas ...