首页
学习
活动
专区
圈层
工具
发布

【Django】QuerySet以及Pickle 序列化在Django中的深度运用详解

切片未执行的QuerySet通常会返回另一个未执行的Query Set。但是,如果使用切片语法的step参数,Django将执行数据库查询并返回一个列表。...有关拾取QuerySet的详细信息,请参阅下一节。在本节中,从数据库中读取结果非常重要。 repr()调用repr()时,将执行QuerySet。...Django为此提供了count()方法。 Pickle 序列化 QuerySet 如果pickle以序列化QuerySet,这将强制在pickle序列化之前将所有结果加载到内存中。...annotation()的每个参数都是一个注释,将添加到返回的QuerySet中的每个对象。 Django提供的聚合函数在以下聚合函数中进行了描述。...,即使是默认排序,也可以在不带参数的情况下调用order() 可以检查QuerySet有序属性确定查询是否排序。

2.3K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Django学习笔记之Django ORM Aggregation聚合详解

    在当今根据需求而不断调整而成的应用程序中,通常不仅需要能依常规的字段,如字母顺序或创建日期,来对项目进行排序,还需要按其他某种动态数据对项目进行排序。Djngo聚合就能满足这些要求。...在第一个查询中,注解在过滤器之前,所以过滤器对注解没有影响。...在第二个查询中,过滤器在注解之前,所以,在计算注解值时,过滤器就限制了参与运算的对象的范围 order_by() 可以根据聚合值进行排序 >>> Book.objects.annotate(num_authors...就不是在原始的 QuerySet 返回结果中对每个对象中添加注解,而是根据定义在 values() 从句中的字段组合对先结果进行唯一的分组,再根据每个分组算出注解值,这个注解值是根据分组中所有的成员计算而得的...这是因为默认排序项中的name也是一个分组项,所以这个查询会根据非重复的(data,name)进行分组,而这并不是你本来想要的结果。

    1.3K20

    Django之Model操作数据库详解

    QuerySet是惰性执行的,创建Query Set不会访问数据库,只有在访问具体查询结果的时候才会访问数据库。...ordering属性对QuerySet中的对象进行排序     Student.objects.filter(school="阳关小学").order_by('-age', 'name')    ...5. reverse():     reverse()         反向排序QuerySet中返回的元素。 第二次调用reverse()将恢复到原有的排序。        ...列中的每一个值在的基础上加10 table1.objects.all().update(num=F("num")+10) Q构建搜索条件, Q的作用:Q是用来做条件查询的 #导入Q from django.db.models..." 总结: QuerySet.exists() > QuerySet.count()==0 > QuerySet 2、模板中显示数据库内容的方法  a、创建数据库 from django.db import

    7.7K10

    Django 聚合与查询集API实现侧边栏

    我们想要汇总QuerySet.中每本书里的这种关系。逐个对象的汇总结果可以由annotate()子句生成。当annotate()子句被指定之后,QuerySet中的每个对象都会被注上特定的值。...2, authors为Book模型中的字段名,count为字段查询,所以用双下划线连接 2 # Interrogate the second object in the queryset >>> q[1...发现aggregate 和 annotate用法的区别了吗,再次举例如下(在聚合函数中指定聚合字段时,Django 允许你使用同样的 双下划线 表示关联关系,): >>> from django.db.models...values('name', 'average_rating') # 这段代码交换了value和average顺序,将给每个作者添加一个唯一的字段,但只有作者名称和average_rating 注解会返回在输出结果中...order_by(*fields): 默认情况下,QuerySet 根据模型Meta 类的ordering 选项排序。你可以使用order_by 方法给每个QuerySet 指定特定的排序。

    1.8K20

    django 1.8 官方文档翻译: 2-5-4 聚合 (初稿)

    不是在原始的 QuerySet返回结果中对每个对象中添加注解,而是根据定义在values() 子句中的字段组合对先结果进行唯一的分组,再根据每个分组算出注解值, 这个注解值是根据分组中所有的成员计算而得的...作者会按名称分组,所以你只能得到某个唯一的作者分组的注解值。...与默认排序或order_by()交互 在查询集中的order_by() 部分(或是在模型中默认定义的排序项) 会在选择输出数据时被用到,即使这些字段没有在values() 调用中被指定。...max_length=10) data = models.IntegerField() class Meta: ordering = ["name"] 关键的部分就是在模型默认排序项中设置的...Django 永远不会 删除你所指定的排序限制(我们不能改动那些方法的行为,因为这会违背 API stability 原则)。 聚合注解 你也可以在注解的结果上生成聚合。

    2.1K30

    Django学习笔记之Models与ORM操作

    # reverse(): 对查询结果反向排序 # distinct(): 从返回结果中剔除重复纪录 # values_list...publisher,author是book表中绑定的字段 #一对多和多对多在这里用法没区别 # 反向查找(条件)----在没有外键的表中,查找与其关联表的字段信息 #反向查找之一对多...聚合查询和分组查询 1.aggregate    通过对QuerySet进行计算,返回一个聚合值的字典。aggregate()中每一个参数都指定一个包含在字典中的返回值。即在查询集上生成聚合。...from django.db.models import Avg,Min,Sum,Max # 从整个查询集生成统计值。比如,你想要计算所有在售书的平均价钱。...是Book模型中price字段的平均值 # aggregate()是QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值对的字典。

    1.3K60

    Django项目知识点(四)

    Django ORM用到三个类:Manager、QuerySet、Model。...QuerySet实例 就是从数据库根据自己要求拿数据的 连数据都那不出来,写啥视图 所以在编写queryset必须用django shell 调试 在model中,Django通过给Model增加一个objects...exclude() 排除满足条件的对象 annotate() 使用聚合函数 order_by() 对查询集进行排序 reverse() 反向排序 distinct() 对查询集去重...当我们需要对查询集(queryset)的某些字段进行计算或进行先分组再计算或排序, 我们就需要使用aggregate和annotate方法了。...这样就可以引用模型字段值并使用它们执行数据库操作,而无需实际将它们从数据库中拉出到Python内存中 说白了就是我从数据库拿东西,但是有些需要的字段没有,要通过绑定的外键的app的model拿。

    1.9K30

    Django之ORM数据库

    MySQL    PyMySQL(纯python的mysql驱动程序) 3     在django的项目中会默认使用sqlite数据库,在settings里有如下设置: ?...在“插入和更新数据”小节中,我们有提到模型的save()方法,这个方法会更新一行里的所有列。 而某些情况下,我们只需要更新行里的某几列。...# reverse(): 对查询结果反向排序 # distinct(): 从返回结果中剔除重复纪录 # values_list...所以使 #用iterator()的时候要当心,确保你的代码在操作一个大的queryset时没有重复执行查询 总结: queryset的cache是用于减少程序对数据库的查询,在通常的使用下会保证只有在需要的时候才会查询数据库...比如,你想要计算所有在售书的平均价钱。Django的查询语法提供了一种方式描述所有 图书的集合。

    2.8K10

    Django之ORM

    在Django中具体的对应方式为: 类名对应数据库中的表名 类名对应数据库中的表名 类属性对应数据库里的字段 类实例对应数据库表里的一行数据 类实例对象的属性对应这行中的字段的值 一.数据库的连接 Django...(**kwargs): 它包含了与所给筛选条件不匹配的对象 order_by(*field): 对查询结果排序 reverse(): 对查询结果反向排序 distinct(): 从返回结果中剔除重复纪录...2.QuerySet对象 查询的结果集就是一个QuerySet对象 QuerySet对象就像是一个列表,列表存储着查询出的结果,可以迭代,可以切片 Django中QuerySet对象是惰性的,即你得到这个对象的时候并没有真正的在数据库中执行...SQL语句,只有用到了QuerySet对象中的数据才会执行SQL语句 想判断QuerySet对象中是否有数据,若写成 if obj: 仍然会执行SQL语句,若使用 if obj.exists(): 就可以避免这种问题...QuerySet对象的使用是有cache缓存的,即遍历第二次QuerySet对象的时候数据是从缓存中拿的,不会执行SQL语句 如果QuerySet对象数据量特别大,遍历时为了避免占用大量cache空间,

    1.4K30
    领券