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

Django中的QuerySet

一、QuerySet   查询集,类似一个列表,包含了满足查询条件的所有项。QuerySet 可以被构造,过滤,切片,做为参数传递,这些行为都不会对数据库进行操作。只有你查询的时候才真正的操作数据库。...意味着QuerySet是惰性执行的----即创建查询集不会带来任何的数据库访问,直到查询集需要求值的时候,Django才会真正运行这个查询。... exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象 values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet... distinct(): 从返回结果中剔除重复纪录(如果你查询跨越多个表,可能在计算QuerySet时得到重复的结果。... count(): 返回数据库中匹配查询(QuerySet)的对象数量。

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

    Django的Manager和QuerySet

    Django的Manager和QuerySet 要从数据库检索对象,需要通过模型类的 Manager 构建一个 QuerySet。...models本身没有什么需要多说的,Django 使用了一套直观的系统:一个模型类代表一张数据表,一个模型类的实例代表数据库表中的一行记录。 模型类的save方法可以插入,更新,删除数据。...在Django中,模型的Manager提供了接口,它赋予了 Django 模型操作数据库的能力。默认情况下,Django 为每个模型类添加了一个名为 objects 的 Manager。...如前所述,你能通过模型的 Manager 获取 QuerySet。每个模型至少有一个 Manager,默认名称是 objects。...在Django的文档中,明确的告诉了开发者,什么时候QuerySet被执行。因为这影响到SQL执行效率。

    1.3K30

    Django(19)QuerySet API

    其实模型名字.objects是一个django.db.models.manager.Manager对象,而Manager这个类是一个“空壳”的类,他本身是没有任何的属性和方法的。...示例图如下: 所以我们如果想要学习ORM模型的查找操作,必须首先要学会QuerySet上的一些API的使用 QuerySet 21个常用的API filter filter:将满足条件的数据提取出来...=True) 那么以上返回的结果是 abc xxx all all:获取这个ORM模型的QuerySet对象。...: print(sql) 那如果确实是想要在查询的时候指定过滤条件该如何做呢,这时候我们可以使用django.db.models.Prefetch来实现,Prefetch这个可以提前定义好queryset...Django将QuerySet转换为SQL语句去执行的五种情况 迭代:在遍历QuerySet对象的时候,会首先先执行这个SQL语句,然后再把这个结果返回进行迭代。

    90910

    django合并多个queryset

    这几天正在做一个关于权限控制的django框架,今天上午遇见了一个bug,因为我的需求是,每个人拥有的权限不同,所以你所能够访问的菜单也不同,那么这时候不同的人员访问不同的菜单是不一样的。...那么我可以把他所能够操作的菜单通过关联表的id查出来,但是我前台的代码是只能解析一个queryset的,那么我便利用chain方法将他们变为一个queryset; 以下是我的代码: all_actor...menu_list = chain(all_actor) print(menu_list) return menu_list django...queryset 合并 通过自带的方法: a1 = User.objects.filter(id__gt=8) a2 = User.objects.filter(id__lt=4) a3 = a1...| a2 注:这种方式合并的结构还是一个queryset,相当于a3把a1和a2的条件合并了,推荐,因为可以用order_by等函数了 只能合并同种model对象的数据` 2, 用python的chain

    3K30

    Django之QuerySet详解

    若要按照另外一个模型中的字段排序,可以使用查询关联模型的语法。即通过字段的名称后面跟两个下划线(__),再加上新模型中的字段的名称,直到希望连接的模型。...像这样: Entry.objects.order_by('blog__name', 'headline') 如果排序的字段与另外一个模型关联,Django将使用关联的模型的默认排序,或者如果没有指定Meta.ordering...如要获取QuerySet中最后五个元素,可以这样做: my_queryset.reverse()[:5] 这与Python直接使用负索引有点不一样。 Django不支持负索引,只能曲线救国。...如果有以下模型: from django.db import models class City(models.Model): # ......查找具有唯一性字段(例如primary_key)的模型是否在一个QuerySet中的最高效的方法是: entry = Entry.objects.get(pk=123) if some_queryset.filter

    3.1K20

    Django学习笔记之Django QuerySet的方法

    一般情况下,我们在写Django项目需要操作QuerySet时一些常用的方法已经满足我们日常大多数需求,比如get、filter、exclude、delete神马的感觉就已经无所不能了,但随着项目但业务逻辑越来越复杂...就是你读出queryset可能会需要一些额外数据要添加进去的时候,你就可以用这个东东咯,使用方法看代码: >>> q = Blog.objects.annotate(Count('entry')) #...,annotate返回的是一个包含注解值的queryset,而aggregate则单独返回注解值,返回类型是一个dict,当然,这种方式在文档中叫做聚合查询,具体使用如下: >>> q = Blog.objects.aggregate...8、first() 和 last() 分别返回queryset的第一项与最后一项,具体用法如下: p = Blog.objects.order_by('title').first() 等同于: try:...答案在这里: django.models 的 on_delete参数,此参数有以下几个可选值: CASCADE:这就是delete()的默认选项,也就是关联删除 PROTECT:如果删除的model obj

    72950

    Django 2.1.7 查询集 QuerySet

    上一篇Django 2.1.7 模型 - 条件查询 F对象 Q对象 聚合查询讲述了关于Django模型的介绍F对象、Q对象、聚合查询等功能。...不管什么查询,返回的结果都基本是查询集QuerySet,如下: In [16]: MiddlewareInfo.objects.all() Out[16]: QuerySet [的过滤器如下: get():返回单个满足条件的对象 如果未找到会引发"模型类.DoesNotExist"异常。...如果多条被返回,会引发"模型类.MultipleObjectsReturned"异常。 count():返回当前查询结果的总条数。 aggregate():聚合,返回一个字典。...在新建的查询集中,缓存为空,首次对查询集求值时,会发生数据库查询,django会将查询的结果存在查询集的缓存中,并返回请求的结果,接下来对查询集求值将重用缓存中的结果。

    1.4K10

    django:convert queryset into list of dicts

    要件:#convert queryset into list of dicts#【Django】QuerySetを辞書型(dict)のlistに変換する1,通过模型(Model)类的Manager,获取...': 'EMS20220707.pdf'}, {'id': 101, 'name': '三菱オンライン入会申込.pdf'}]>>>> type(doc)django.db.models.query.QuerySet...doc.values_list('id','name'))[(100, 'EMS20220707.pdf'), (101, '三菱オンライン入会申込.pdf')]补充说明:参照检索对象检索对象要从数据库检索对象,要通过模型类的...在 SQL 的层面上, QuerySet 对应 SELECT 语句,而*filters*对应类似 WHERE 或 LIMIT 的限制子句。你能通过模型的 Manager 获取 QuerySet。...每个模型至少有一个 Manager,默认名称是 objects。直接通过模型类使用它

    1.8K30

    Django学习笔记:QuerySet API

    QuerySet API: 我们通常做查询操作的时候,都是通过模型名字.objects的方式进行操作。...其实模型名字.objects是一个django.db.models.manager.Manager对象,而Manager这个类是一个“空壳”的类,他本身是没有任何的属性和方法的。...他的方法全部都是通过Python动态添加的方式,从QuerySet类中拷贝过来的。 所以我们如果想要学习ORM模型的查找操作,必须首先要学会QuerySet上的一些API的使用。...: print(sql) 那如果确实是想要在查询的时候指定过滤条件该如何做呢,这时候我们可以使用django.db.models.Prefetch来实现,Prefetch这个可以提前定义好queryset...所以如果只需要取其中一部分的数据的时候,建议大家使用切片操作。 什么时候Django会将QuerySet转换为SQL去执行: 生成一个QuerySet对象并不会马上转换为SQL语句去执行。

    78020

    【实测】django的QuerySet 应该怎么用?

    其实就是查询的意思。 所以,queryset 是什么?是查询结果的集合的意思。 我就不用那些标准的百度百科的回答了,咱直接上代码,从数据直接拿出来的数据来当例子,你就明白了。...我们用数据工厂平台的代码做演示,目前的models.py中的超链接表,存放数据为这样的,有俩个字段: 如图,俩个字段分别是link_name和link_url。...好然后我们用一段函数来把数据从中取出来并打印: 结果如下: 可以看到,直接从数据库用.all 或者.filter方法拿出来的 结果是queryset,也就是查询集合。...所以queryset的另一个特性就是可以像列表一样遍历和用下标定位具体内部元素: 遍历的具体子元素,都是一个个货真价实的数据记录哈。 别看我直接输出,就显示一个link_name的值。...此时我们得到的仍然是queryset,但结果中,却显示了所有字段。 这样我们用起来就更方便。为什么这么说呢? 因为我们可以把它外面再加上list() 变成我们python常用的格式了。

    73010

    Django学习笔记之Queryset详解

    Django ORM用到三个类:Manager、QuerySet、Model。...QuerySet实例,QuerySet是一个可遍历结构,包含一个或多个元素,每个元素都是一个Model 实例,它里面的方法也是表级方法,前面说了,Django给我们提供了增加表级方法的途径,那就是自定义...manager类,而不是自定义QuerySet类,一般的我们没有自定义QuerySet类的必要;django.db.models模块中的Model类,我们定义表的model时,就是继承它,它的功能很强大...’> >>> a = UserEx.objects.all() >>> type(a) django.db.models.query.QuerySet’> QuerySet是延迟获取的...提供的方法就够用了,不过有时where子句中包含复杂的逻辑,这种情况下django提供的方法可能不容易做到,还好,django有extra(), extra()中直接写一些SQL语句。

    3.2K30

    Django 2.1.7 查询集 QuerySet

    上一篇Django 2.1.7 模型 - 条件查询 F对象 Q对象 聚合查询讲述了关于Django模型的介绍F对象、Q对象、聚合查询等功能。...不管什么查询,返回的结果都基本是查询集QuerySet,如下: In [16]: MiddlewareInfo.objects.all() Out[16]: QuerySet [的过滤器如下: get():返回单个满足条件的对象 如果未找到会引发"模型类.DoesNotExist"异常。...如果多条被返回,会引发"模型类.MultipleObjectsReturned"异常。 count():返回当前查询结果的总条数。 aggregate():聚合,返回一个字典。...在新建的查询集中,缓存为空,首次对查询集求值时,会发生数据库查询,django会将查询的结果存在查询集的缓存中,并返回请求的结果,接下来对查询集求值将重用缓存中的结果。

    98120

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

    切片未执行的QuerySet通常会返回另一个未执行的Query Set。但是,如果使用切片语法的step参数,Django将执行数据库查询并返回一个列表。...Django为此提供了count()方法。 Pickle 序列化 QuerySet 如果pickle以序列化QuerySet,这将强制在pickle序列化之前将所有结果加载到内存中。...QuerySet类具有以下公共属性,可用于内省: 有序 True如果QuerySet是有序的–有一个order_by()子句或模型的默认排序。否则,这是错误的。...表达式可以是简单值、对模型(或任何相关模型)字段的引用,或计算与QuerySet中的对象相关的对象的聚合表达式(平均值、总和等)。...annotation()的每个参数都是一个注释,将添加到返回的QuerySet中的每个对象。 Django提供的聚合函数在以下聚合函数中进行了描述。

    2.3K10

    【Django models】QuerySet API详解-filter、exclude、annotate

    QuerySet API详解-filter、exclude、annotate: 在使用 QuerySet 进行查找操作的时候,可以提供多种操作。...这说明 filter 返回的对象是一个拥有 order_by 方法的对象。而这个对象正是一个新的 QuerySet 对象。因此可以使用 order_by 方 法。...那么以下将介绍在那些会返回新的 QuerySet 对象的方法。 1. filter :将满足条件的数据提取出来,返回一个新的 QuerySet 。具体的 filter 可以提供什么条件查询。...2. exclude :排除满足条件的数据,返回一个新的 QuerySet 。...3. annotate :给 QuerySet 中的每个对象都添加一个使用查询表达式(聚合函数、F表达式、Q表达式、Func表达式等)的新字段。

    1.3K20
    领券