首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Django模型查询与性能调优:告别N+1问题

    一、查询基础QuerySet 详解Django 中通过模型类的 Manager 构建 QuerySet 来检索数据库对象,其核心特性包括:代表数据库中对象的集合可通过过滤器缩小查询范围具有惰性执行特性(...检测方法Django Debug Toolbar:直观显示请求中的 SQL 查询日志记录:配置日志记录 SQL 语句性能分析工具:如 Django Silk 分析查询性能解决方案方法 1:使用 select_related...数据库访问优化三、高级查询优化values()返回字典形式的查询集(返回一个 ValuesQuerySet 对象,其中每个元素是一个字典),适合提取特定字段books = Book.objects.values...,字典的键为字段名,值为字段对应的数据返回一个包含元组的查询集,元组中的元素依次对应指定字段的值 内存占用 相对较高,因为字典需要存储键值对信息 通常更节省内存...《Django从入门到实战》专栏!

    11410

    django 1.8 官方文档翻译:7-2 管理操作

    在这些例子中,Django管理后台可以让你实现和注册“操作” —— 仅仅只是一个以已选中对象集合为参数的回调函数。 在Django自带的管理页面中都能看到这样的例子。...Django在所有的模型中自带了一个“删除所选对象”操作。...继续阅读,来弄清楚如何向列表添加你自己的操作。 编写操作 通过示例来解释操作最为简单,让我们开始吧。 操作的一个最为普遍的用例是模型的整体更新。...: 提供中间页面的操作 通常,在执行操作之后,用户会简单地通过重定向返回到之前的修改列表页面中。...这个函数返回包含允许操作的字典。字典的键是操作的名称,值是 (function, name, short_description)元组。 多数情况下,你会按需使用这一方法,来从超类中的列表移除操作。

    89220

    django模型

    每个模型对 应数据库中唯一的一张表 如何编写模型 模型:每个模型都用一个类表示,该类继承自django.db.models.Model。...也可以使用一条语句创建并保存一个对象,使用create()方法 查询对象 通过模型中的管理器构造一个查询集,来从你的数据库中获取对象。 查询集(queryset)表示从数据库中取出来的对象的集合。...指定显示列 values(返回一个列表) 返回一个ValuesQuerySet——QuerySet的一个子类,迭代时返回字典而不是模型实例对 象。...User.objects.values("id", "username") values_list(返回一个元组) 与values()类似,只是在迭代时返回的是元组而不是字典。...如果您在某些情 况下使用查询集的结果,当您最初获取数据时不知道是否需要这些特定字段,可以告诉 Django不要从数据库中检索它们。

    3.8K20

    37.Django1.11.6文档

    理解它是如何工作的将让你编写最高效的代码。 在一个新创建的QuerySet中,缓存为空。...首次对QuerySet进行求值 —— 同时发生数据库查询 ——Django 将保存查询的结果到QuerySet的缓存中并返回明确请求的结果(例如,如果正在迭代QuerySet,则返回下一个结果)。...(2)从管理器调用自定义QuerySet方法 虽然大多数标准QuerySet的方法可以从Manager中直接访问到,但是如果你需要将一些被定义到一个自定义QuerySet中的额外方法也在Manager...这个验证特定于该类型的字段,与后面如何使用它无关。...Handlers Handler决定如何处理logger中的每条消息。 它描述一个特定的日志行为,例如将消息写到屏幕上、写到文件中或者写到网络socket。

    25.5K80

    Django之ORM 对象-关系映射(一)

    ORM和数据库关系 在 Django 中 model 是数据的单一、明确的信息来源。它包含了存储的数据的重要字段和行为。通常,一个模型(model)映射到一个数据库表。... Tb.objects.values(*field) 返回一个 ValueQuerySet — 一个特殊的 QuerySet,运行后得到的并不是一系列 model 的实例化对象,而是一个可迭代的字典序列... Tb.objects.values_list(*field) 它与 values() 非常相似,它返回的是一个元组序列,values 返回的是一个字典序列。 ?... Tb.objects.distinct() 从返回结果中剔除重复记录(如果查询跨越多个表,可能在计算 QuerySet 时得到重复的结果。... Tb.objects.count() 返回数据库中匹配查询(QuerySet)的对象数量。 ? Tb.objects.first() 返回第一条记录。 ?

    1.3K30

    python测试开发django-14.查询表结果(超详细)

    前言 django查询数据库的方法很多,不同的方法返回的结果也不太一样,本篇详细讲解关于查询的13个方法 返回对象是对象列表的: all(), filter(), exclude(), order_by...() 返回的是整个表的内容, 这里返回的是可迭代对象queryset,并没直接返回全部数据 如果想取出数据,需要用到for循环读取 from django.http import HttpResponse...reverse() values_list() 由queryset对象调用, 返回值是queryset 一个元组序列 和values差不多,只是这里返回的是元组 ret=User..objects.all...().values_list(“user_name”, “mail”) distinct() 从返回结果中剔除重复纪录 由queryset对象调用,返回值是queryset 和sql里面的distinct...去重一样 ret=User.objects.all().values(“user_name”, “mail”).distinct() get()返回单个对象 django的get是从数据库的取得唯一个匹配的结果

    1.3K20

    Django 学习笔记之模型(下)

    题图:by thefolkpr0ject from Instagram 上篇文章讲解了 Django 如何创建模型,本文将继续讲解如何对模型进行增删改查操作。...1 前言 当我们建立好数据模型,Django 会自动为我们生成一套数据库接口相关的接口。这套接口称为 QuerySet API。为什么叫 QuerySet ?...因为从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet。 为了方便理解,我继续使用上篇文章的例子。另外方便我们在打印对象信息时,能得到对象的信息。所以我们需要对之前的代码做下修改。...,它返回是一个元组。...但是这里比较特殊,QuerySet 对象的 id 是从 1 开始的,所以 [:3] 表示 [1:3], 返回 id 为 1, 2, 3 的对象。 另外,这种切片操作时可以节约内存的。

    77930

    Django学习-第十讲(上):QuerySet API 学习

    他的方法全部都是通过Python动态添加的方式,从QuerySet类中拷贝过来的 ? image 所以我们如果想要学习ORM模型的查找操作,首先要学会QuerySet上的一些API的使用。 2....那么以下将介绍在那些会返回新的QuerySet对象的方法。...1.filter:将满足条件的数据提取出来,返回一个新的QuerySet 2.exclude:排除满足条件的数据,返回一个新的QuerySet 提取那些标题不包含hello的图书 Article.objects.exclude...只不过返回的QuerySet中,存储的不是字典,而是元组 articles = Article.objects.values_list("id","title") print(articles) 那么在打印...这个方法的返回值是一个元组,元组的第一个参数obj是这个对象,第二个参数created代表是否创建的。 12.exists:判断某个条件的数据是否存在。

    68320

    Django学习笔记:QuerySet API

    他的方法全部都是通过Python动态添加的方式,从QuerySet类中拷贝过来的。 所以我们如果想要学习ORM模型的查找操作,必须首先要学会QuerySet上的一些API的使用。...如果在values中没有传递任何参数,那么将会返回这个恶模型中所有的属性。 values_list:类似于values。只不过返回的QuerySet中,存储的不是字典,而是元组。...: print(sql) 那如果确实是想要在查询的时候指定过滤条件该如何做呢,这时候我们可以使用django.db.models.Prefetch来实现,Prefetch这个可以提前定义好queryset...这个方法的返回值是一个元组,元组的第一个参数obj是这个对象,第二个参数created代表是否创建的。 bulk_create:一次性创建多个数据。...因为count在底层是使用select count(*)来实现的,这种方式比使用len函数更加的高效。 first和last:返回QuerySet中的第一条和最后一条数据。

    78020

    05.Django基础五之django模型层(一)单表操作

    一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量...(4)unique 如果该值设置为 True, 这个数据字段的值在整张表中必须是唯一的 (5)choices 由二元组组成的一个可迭代对象(例如,列表或元组),用来给字段提供选择项。...那么django是如何生成数据库表的呢, django是根据 migration下面的脚本文件来生成数据表的 每个migration文件夹下面有多个脚本,那么django是如何知道该执行那个文件的呢...(): queryset类型的数据来调用,返回数据库中匹配查询(QuerySet)的对象数量。...values和values_list得到的queryset类型的数据来调用,从返回结果中剔除重复纪录 queryset方法大全: ####################################

    3.3K10

    Redis进阶-如何从海量的 key 中找出特定的key列表 & Scan详解

    ---- 需求 假设你需要从 Redis 实例成千上万的 key 中找出特定前缀的 key 列表来手动处理数据,可能是修改它的值,也可能是删除 key。...那该如何从海量的 key 中找出满足特定前缀的 key 列表来?...scan 返回给客户端的游标整数; 返回的结果可能会有重复,需要客户端去重复,这点非常重要; 遍历的过程中如果有数据修改,改动后的数据能不能遍历到是不确定的; 单次返回的结果是空的并不意味着遍历结束,...第一次遍历时,cursor 值为 0,然后将返回结果中第一个整数值作为下一次遍历的 cursor。一直遍历到返回的 cursor 值为 0 时结束。...scan 也需要考虑这个问题,对与 rehash 中的字典,它需要同时扫描新旧槽位,然后将结果融合后返回给客户端。

    6K30
    领券