数据库查询优化

  优化:虽然减轻了数据库的压力,但查询速度大大的减慢

  ORM内所有的语句操作,默认都是惰性查询,只有你在真正的需要数据的时候才会走数据,

如果你只是写ORM语句时,是不会走数据库的,这样的原理设计,主要是在于减轻数据库的压力。

例如:

查询优化的关键字方法:select_related、only、prefentch_related、defer

Django数据库优化操作之only方法

  加only参数是从查询结果中只取某个字段,封装做成对象的形式,不再频繁的走数据库,从而减轻数据库的压力

上述r.title在查询时,即使循环也只是走了一次数据库查询,而r.price,没有的字段时,会循环的频繁走数据库

Django数据库优化操作之defer方法

  与only刚好相反,会将不是括号内的所有字段信息查询出来;如果点的是括号内的字段会频繁的走数据库查询;

如果不是字段内的反而点一次只查询一次,也是为了排除在外,然后起到优化的作用

Django数据库优化操作之select_related主动联表查询

例子如:

如果不用select_related时。查询all()执行的结果中显示多条MySQL语句,

而select_related会一致性的做连表操作,一句MySQL语句即可,大大的减轻数据库的压力

all()查询的结果显示:

而select_relate的查询方法是一致性的连表操作

结论:

"""
select_related:会将括号内外键字段所关联的那张表 直接全部拿过来(可以一次性拿多张表)跟当前表拼接操作
从而降低你跨表查询 数据库的压力 注意select_related括号只能放外键字段(一对一和一对多)
res = models.Book.objects.all().select_related('外键字段1__外键字段2__外键字段3__外键字段4')
"""

Django数据库优化操作之perfetch_related非主动联表查询

  不直接连表,但是会以第一次查询的结果之上再次查询了另一张表操作,看似查询两次

"""
不主动连表操作(但是内部给你的感觉像是连表操作了),而是将book表中的publish全部拿出来,在取publish表中将id对应的所有的数据取出
res = models.Book.objects.prefetch_related('publish')
括号内有几个外键字段 就会走几次数据库查询操作 """

Django orm中事务操作

  事务的定义:将多个sql语句操作变成原子性操作,要么同时成功,有一个失败则里面回滚到原来的状态;

保证数据的完整性和一致性(NoSQL数据库对于事务则是部分支持)

  联想数据库MySQL中的事务有以下特点

事务的ACID特性:原子性、一致性、隔离性、持久性

直接导入模块使用事务:开启事务,事务回滚(自动)

图书管理系统的搭建

  首先先建立号数据库,在进行逻辑操作:

1、修改Django指定的数据库配置步骤:用可视化工具Navicat手动新建数据库,库名:day56

2、在Django的settings.py文件中修改环境配置

3、在app01__init__中指定修改默认的数据库,把Sqlite修改为常用的MySQL数据库

常用的数据库:

3、在modles.py中建立表模型,进行创建表的字段,属性,ID等操作

4、创建好表结构之后,必须执行数据库的迁移命令操作,把数据同步到库day56中,有两个命令

(1)、在小本本上(migrations文件夹)记录数据库的修改

(2)、执行所谓真正意义上的迁移数据操作

也可以快捷创建使用:

5、在数据库中手录入数据信息

6、新创建的app一定要先去settings.py注册

7、在app01的views.py中书写逻辑代码块

8、在项目文件下的url.py书写url匹配规则,相对应的方法

9、书写前端功能搭建的代码固定建立在templates文件夹下

前端内容的书写:

  利用模板的继承,模板的导入,使用前端模板框架Bootstsrap复杂模板,修改搭建

模板继承:

Django数据库查询优化-事务-图书管理系统的搭建的更多相关文章

  1. Django实现简单的图书管理系统

    目录 Django写图书管理系统 功能截图 创建Django项目 开始项目 配置文件 建立路由关系 开始写Django项目 编写核心逻辑函数 写前端页面 add_author.html add_boo ...

  2. Django数据库查询优化与AJAX

    目录 数据库设计三大范式 orm相关的数据库查询优化 惰性查询 all.only与defer select_related与prefetch_related MTV与MVC模型 MTV(models ...

  3. Django 数据库查询优化

    Django数据层提供各种途径优化数据的访问,一个项目大量优化工作一般是放在后期来做,早期的优化是“万恶之源”,这是前人总结的经验,不无道理.如果事先理解Django的优化技巧,开发过程中稍稍留意,后 ...

  4. ORM中聚合函数、分组查询、Django开启事务、ORM中常用字段及参数、数据库查询优化

    聚合函数 名称 作用 Max() 最大值 Min() 最小值 Sum() 求和 Count() 计数 Avg() 平均值 关键字: aggregate 聚合查询通常都是配合分组一起使用的 关于数据库的 ...

  5. Django图书管理系统(前端对数据库的增删改查)

    图书管理系统 出版社的管理 源码位置:https://gitee.com/machangwei-8/learning_materials/tree/master/%E9%A1%B9%E7%9B%AE/ ...

  6. Django常用字段及参数、事务、数据库查询优化

    常用字段 注意: Django中没有设置对应char类型的字段,但可以支持自己定义. 自定义对应于数据库的char类型字段: from django.db.models import Field cl ...

  7. Django学习——Django测试环境搭建、单表查询关键字、神奇的双下划线查询(范围查询)、图书管理系统表设计、外键字段操作、跨表查询理论、基于对象的跨表查询、基于双下划线的跨表查询

    Django测试环境搭建 ps: 1.pycharm连接数据库都需要提前下载对应的驱动 2.自带的sqlite3对日期格式数据不敏感 如果后续业务需要使用日期辅助筛选数据那么不推荐使用sqlite3 ...

  8. 在Django中使用ORM创建图书管理系统

    一.ORM(对象关系映射) 很多语言的web框架中都有这个概念 1. 为什么要有ORM? 1. 写程序离不开数据,要使用数据就需要连接数据库,但是不同的数据库在sql语句上(mysql,oracle等 ...

  9. Django练习——图书管理系统

    Django图书管理系统 创建一个项目 1. django-admin startproject 图书管理 2. cmd 命令终端下创建一个app python manage.py startapp ...

随机推荐

  1. python利用百度云接口实现车牌识别

    一个小需求---实现车牌识别. 目前有两个想法 调云在线的接口或者使用SDK做开发(配置环境和编译第三方库很麻烦,当然使用python可以避免这些问题) 自己实现车牌识别算法(复杂) ! 一开始准备使 ...

  2. swiper实现匀速无缝滚动

    设置属性 speed:2500,//匀速时间 autoplay: { delay: 0, stopOnLastSlide: false, disableOnInteraction: true, }, ...

  3. RN命令的使用

    RN中文网站 https://reactnative.cn/docs/getting-started/ 创建项目 1.最新版本项目react-native init MyApp 使用可行版本  rea ...

  4. Assignment写作需要掌握的两种表达方式

    在正式开始写Assignment之前都会进行文献检索和整理,选择适合Assignment选题的文献资料进行阅读和引用.对于文献中与自己的观点高度相关的参考资料要如何具体引用,而不造成抄袭或者增加文章的 ...

  5. JavaScript把两个数组对象合并成一个一一对应的数组对象

    合并数组或者对象在数组或对象前面加...,是es6的新写法,然后数组的map方法会返回数组. var obj1 = [{ , "model": "XQG70-S1208F ...

  6. 组件state

    一.设计合适的state 1.1 定义: state代表一个组件UI呈现的完整状态 stae代表一个组件UI呈现的最小状态集[所有状态都用于组件UI的变化,没有任何多余的状态] 1.2 state和p ...

  7. openstack trove主要贡献公司-Tesora被Stratoscale收购

    新闻链接:http://www.stratoscale.com/press/press-releases/stratoscale-acquires-database-as-a-service-prov ...

  8. Mysql 3306 被 linux 防火墙拦截

    项目测试时需要本地连接linux服务器的mysql, 发现navicat无法连接 原因一:mysql没有添加外部ip的访问权限. 原因二:mysql 的 3306 端口 处于被防火墙的拦截状态. 解决 ...

  9. nodejs(14)express获取url中的参数

    问号传参获取参数 获取 http://127.0.0.1:3001/user?id=10&name=zs 中的查询参数: 直接使用 req.query 获取参数即可: 注意:URL 地址栏中通 ...

  10. 2020/1/28 PHP代码审计之代码执行漏洞

    0x00代码执行原理 应用程序在调用一些能够将字符串转换为代码的函数(如PHP中的eval)时,没有考虑用户是否控制这个字符串,将造成代码执行漏洞. 该漏洞主要存在于eval().assert().p ...