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