一、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()用于实现聚合函数,聚合函数包括CountSumMaxMinAvg,包含在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
最后修改:2024 年 11 月 09 日
如果觉得我的文章对你有用,请随意赞赏