美文网首页django
Django-18 聚合查询和原生数据库操作

Django-18 聚合查询和原生数据库操作

作者: JuliusL | 来源:发表于2021-07-16 21:57 被阅读0次

聚合查询(为统计而生)

聚合查询是指对一个数据表中的一个字段的数据进行部分或全部进行统计查询,查bookstore_book数据表中的全部书的平均价格,查询所有书的总个数等,都要使用聚合查询,聚合查询分为

  • 整表查询
  • 分组查询

整表聚合

不带分组的聚合查询是指导将全部数据进行集中统计查询
聚合函数[需要导入]

  • 导入方法:from django.db.models import *
  • 聚合函数:Sum,Avg,Count,Max,Min
    语法:MyModel.objects.aggregate(结果变量名=聚合函数('列'))
  • 返回结果:结果变量名和值组成的字典
  • 格式为:{"结果变量名":值}

分组聚合

分组聚合是指通过计算查询结果中每一个对象所关联的对象集合,从而得出宗继志(也可以是平均值或总和),即为查询集的每一项生成聚合。
语法:

  • QuerySet.annotate(结果变量名=聚合函数('列'))
  • 返回值: QuerySet
    1,通过先用查询结果MyModel.objects.values查找查询要分组聚合的列
    MyModel.objects.values('列1','列2')
    2,通过返回结果的QuerySet.annotate方法分组聚合得到分组结果
pub_set = Book.objects.values('pub')
pub_count_set = pub_set.annotate(myCount=Count('pub'))

原生数据库操作

查询

Django也可以支持直接用sql语句的方式通信数据库
查询:使用MyModel.objects.raw()进行数据库查询操作
语法:MyModel.objects.raw(sql语句,拼接参数)
返回值:RawQuerySet集合对象【只支持基础操作,比如循环】

books = models.Book.objects.raw('select * from bookstore_book')
for book in books:
  print(book)

SQL注入

防SQL注入的正确写法

s2 = Book.objects.raw('select * from book where id=%s',['1 or 1=1'])

cursor

完全跨过模型类操作数据库-查询/更新/删除

  1. 导包 from django.db import connection
  2. 用创建cursor类的构造函数创建cursor对象,再使用cursor对象,为保证在出现异常时能释放cursor资源,通常使用with语句进行创建操作。
from django.db import connection
with connection.cursor() as cur:
  cur.excute('执行SQL语句','拼接参数')

相关文章

  • Django-18 聚合查询和原生数据库操作

    聚合查询(为统计而生) 聚合查询是指对一个数据表中的一个字段的数据进行部分或全部进行统计查询,查bookstore...

  • SQL 查询命令

    一 数据库基本操作 二 高级查询 1. 新建表结构 2. 聚合查询 3. 多表查询 4. 连接查询 关于INNER...

  • JAVA API操作ES聚合查询

    前言 es查询速度比关系型数据库确实快很多,特别是海量数据的查询。但是查询操作比较难受,特别是复杂聚合操作的时候。...

  • thinkphp5学习笔记(五)数据库与模型

    连接与查询构造器 数据库连接配置 数据库原生查询 查询构造器 1.查询构造器的原理: 2.什么是链式操作?为什么要...

  • 7.MySQL聚合查询,子查询,联合查询

    聚合查询在我们日常查询数据库的时候使用较多,常见的聚合函数有SUM()、MAX()等,而分组聚合是数据库语言的又一...

  • 【详细教程】一文参透MongoDB聚合查询

    MongoDB聚合查询 什么是聚合查询 聚合操作主要用于处理数据并返回计算结果。聚合操作将来自多个文档的值组合在一...

  • Redis内部的阻塞式操作

    Redis内部中共有五个阻塞点: 集合全量查询和聚合操作 bigkey 删除 清空数据库 AOF 日志同步写 从库...

  • Laravel数据库操作的三种方式

    一、数据库操作之DB facade (跟使用原生sql操作没什么区别) 1.查询操作 2.新增操作 更新操作 删除...

  • MYSQL笔记

    数据库操作 where后面不可以跟聚合函数,having后可以进行聚合函数的判断。 从学生表中查询数学成绩大于70...

  • mysql 基础知识

    3, 数据库的考点:多表联查,聚合函数和分组, 自查询 1. 简述数据库查询语句中,内连接inner join ,...

网友评论

    本文标题:Django-18 聚合查询和原生数据库操作

    本文链接:https://www.haomeiwen.com/subject/snzspltx.html