1.聚合查询
聚合查询是指对一个数据表中的一个字段的数据进行部分或全部的统计查询。差Book数据表中的全部书的平均价格、查询所有书的总数等都需要使用聚合查询。
聚合查询分为:
(1)整表聚合
聚合函数的导入:
from django.db.models import *
聚合函数:Sum、Avg、Count、Max、Min
语法:
MyModel.objects.aggregate(结果变量名=聚合函数(‘列名’))
结果变量名也就是在sql语句中的Count(*) as 别名。也就相当于是别名就是我们的参数中的结果变量名的参数。通过以字典的形式进行表达,方便在程序中进行数据检索和数据获取。
(2)分组聚合
语法:
QuerySet.annotate(结果变量名=聚合函数(‘列名’))
返回值:
QuerySet
###2.原生数据库操作
方案1:
查询:
直接使用MyModel.objects.raw()进行数据库的查询操作。
语法:
MyModel.objects.raw(sql语句,拼接参数)
返回值:
RawQuerySet集合对象【只支持基础操作,比如循环】
示例:
可以发现,这里的item是一个对象。
Django官方并不推荐使用sql语句进行查询。因为可能会出现sql注入的漏洞导致web应用程序产生严重的缺陷和问题。
因此,在sql语句的拼接参数中,通过参数化方式能够防范sql注入攻击。
例子:
当我们没有使用参数化进行参数传递的时候,所有的书籍信息都被导出。
当我们启用参数化查询时,我们成功的防范了sql注入攻击。