一、QuerySet
order_by()
order_by()
方法用于对查询结果集进行排序,语法结构为:
QuerySet.order_by('-id')
-id
表示以id
字段降序排序。
create()
create()
方法用于创建模型对象实例(实际上就是在数据表中插入一条记录),该方法创建与保存一步到位。其语法结构是:
object = QuerySet.create(**kwargs)
也可以通过Model
的方式进行创建:
object = Model()
object.property = value
object.property = value
...
object.save()
delete()
delete()
用于执行删除操作,返回值为被删除的对象的数量,其语法结构是:
QuerySet.delete()
update()
update()方法用于更新记录
,其语法结构是:
QuerySet.update(**kwargs)
或者:
object = Model.objects.get(pk=1)
object.property = value
object.property = value
....
object.save()
前者将返回被影响的记录数;而后者没有返回值。
F()
函数和Q()
函数
这两个函数位于django.db.models
模块
from django.db.models import F,Q
Q
()函数用于构建复杂的查询条件,可以将多个查询条件组合在一起,然后再使用逻辑运算符(&
或|
)连接在一起。
condition = Q(publishing='中华书局') | Q(publishing='湖南文艺出版社')
books = BookList.objects.filter(condition).all()
如果在更新或查找时,在条件表达式中引用了本表的字段,那么条件表达式中的字段必须用F()
函数进行处理。
book = BookList.objects.get(pk=12)
book.price = F('price') + 10
book.save()
aggreage()
方法
aggregate()
用于实现聚合函数,聚合函数包括Count
、Sum
、Max
、Min
、Avg
,包含在django.db.models
模块内。
from django.db.models import Count,Sum,Max,Min,Avg
基本的使用过程如下:
QuerySet.aggregate(key=Count('field_name'))
QuerySet.aggregate(key=Max('field_name'))
QuerySet.aggregate(key=Min('field_name'))
QuerySet.aggregate(key=Sum('field_name'))
QuerySet.aggregate(key=Avg('field_name'))
在模板中可以通过
floatformat
过滤器对数字进行四舍五入的操作,示例如下:salary = 89963.328
{{ salary|floatformat:2}} 将返回89963.33
annotate()
用于对指定字段进行聚合。其语法结构是:
在使用该方法前必须先通过values()
方法进行字段过滤。
QuerySet.annotate(key=Count('field_name'))
QuerySet.annotate(key=Sum('field_name'))
QuerySet.annotate(key=Avg('field_name'))
QuerySet.annotate(key=Min('field_name'))
QuerySet.annotate(key=Max('field_name'))
raw()
raw()
方法用于执行原生的SQL
命令,其语法结构是:
QuerySet.raw(SQL命令)
raw()
方法执行后的返回值类型为RawQuerySet
,该类型的对象仍然是一个可迭代对象。
raw()
方法可能会引发SQL
注入的现象。
二、分页
MySQL
数据库的分页实际是利用了SELECT
语句的LIMIT
子句实现的!!!
其标准的语法结构是:
SELECT ....
LIMIT [offset,]row_count
offset
指从第几条记录开始返回,默认为0
row_count
指返回多少条记录。
分页时,一定会通过地址栏的参数将当前页码传递到数据库,那么offset
的标准的计算公式为:
(页码-1) * 每页显示的记录数
Paginator
类
Paginator
类位于django.core.paginator
模块
该类的构造函数为:
Paginator(object_list,per_page)
其中:
object_list
表示要分页的对象,一般情况为列表或元素或QuerySet
per_page
表示每页要显示多少条记录
num_pages
属性
num_pages
用于获取分页的总页数
Paginator.num_pages
page()
方法
page()
方法用于返回指定页码中的所有数据,其语法结构是:
Paginator.page(页码)
该方法的返回值为Page
对象,该对象位于django.core.paginator.Page
模块内
get_page()
get_page()
用于返回指定页码中的所有数据,其语法结构是:
Paginator.get_page(页码)
get_page()
方法可以自动处理页码参数的非法情况的情形。
Page
类
next_page_number()
将返回下一页的页码,语法结构为:
Page.next_page_number()
previous_page_number()
将返回上一页的页码,语法结构为:
Page.previous_page_number()
has_next()
如果当前页有下一页时返回True
has_previous()
如果当前页有上一页时返回True
paginator
属性
paginator
属性于返回产生当前Page
对象的Paginator
对象,其语法结构为:
Page.paginator