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

django 1.8 官方文档翻译: 2-6-4 数据库访问优化

你也可能想使用外部的项目,像django-debug-toolbar,或者直接监控数据库的工具。 记住你可以优化速度、内存占用,甚至二者一起,这取决于你的需求。...数据在内存中如何存储。 理解缓存属性 和整个QuerySet的缓存相同,ORM对象的属性的结果中也存在缓存。通常来说,不可调用的属性会被缓存。...要小心使用你自定义的属性 —— 实现所需的缓存取决于你,例如使用cached_property装饰符。 使用with模板标签 要利用QuerySet的缓存行为,你或许需要使用with模板标签。...使用iterator() 当你有很多对象时,QuerySet的缓存行为会占用大量的内存。这种情况下,采用iterator()解决。...另外,当建立起一个带有延迟字段的模型时,要意识到一些(小的、额外的)消耗会在Django内部产生。

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

    07.Django学习之model进阶

    处理成千上万的记录时,将它们一次装入内存是很浪费的。更糟糕的是,巨大的queryset可能会锁住系统 进程,让你的程序濒临崩溃。...要避免在遍历数据的同时产生queryset cache,可以使用iterator()方法 来获取数据,处理完数据就将其丢弃。...所以使 #用iterator()的时候要当心,确保你的代码在操作一个大的queryset时没有重复执行查询。...也可以通过depth参数指定递归的深度,Django会自动缓存指定深度内所有的字段。如果要访问指定深度外的字段,Django会再次进行SQL查询。...但是对于多对多关系,使用SQL语句解决就显得有些不太明智,因为JOIN得到的表将会很长,会导致SQL语句运行时间的增加和内存占用的增加。

    2.3K30

    一次django内存异常排查

    起因 Django 作为 Python著名的Web框架,相信很多人都在用,自己工作中也有项目项目在用,而在最近几天的使用中发现,部署Django程序的服务器出现了内存问题,现象就是运行一段时间之后,内存占用非常高...而在这次的排查中,最终确定是在一个汇总数据的接口上,定位到问题处在了Django ORM 使用不当导致的。...QuerySet加载到内存中,从而出现内存占用过高的问题,而如果并且这个时候这个接口的响应速度也是非常会变慢,而这个QuerySet 中的数据越多,内存占用越明显。...在Django的文档中其实做了说明 exists()¶ Returns True if the QuerySet contains any results, and False if not....总结 除了单元测试,还需要做大数据量测试,这次的问题如果在测试的时候做过一定数据量的测试,可能很早就能及时发现问题 对于基础的库的使用要更加熟悉 排查问题的思路要明确,不然可能会无从下手 延伸阅读 https

    1.4K20

    Django-model进阶(中介模型,查询优化,extra,整体插入)

    处理成千上万的记录时,将它们一次装入内存是很浪费的。更糟糕的是,巨大的queryset可能会锁住系统 进程,让你的程序濒临崩溃。...要避免在遍历数据的同时产生queryset cache,可以使用iterator()方法 来获取数据,处理完数据就将其丢弃。...所以使 #用iterator()的时候要当心,确保你的代码在操作一个大的queryset时没有重复执行查询。...也可以通过depth参数指定递归的深度,Django会自动缓存指定深度内所有的字段。如果要访问指定深度外的字段,Django会再次进行SQL查询。...但是对于多对多关系,使用SQL语句解决就显得有些不太明智,因为JOIN得到的表将会很长,会导致SQL语句运行时间的增加和内存占用的增加。

    2K70

    Django之ORM

    在Django中具体的对应方式为: 类名对应数据库中的表名 类名对应数据库中的表名 类属性对应数据库里的字段 类实例对应数据库表里的一行数据 类实例对象的属性对应这行中的字段的值 一.数据库的连接 Django...三.增删改查 增删改查的操作会在视图函数中进行,所以要先引入到views.py中 from blog.models import * 1.增加 1.普通字段 create方式 student.objects.create...,values返回的是一个字典序列 count(): 返回数据库中匹配查询(QuerySet)的对象数量。...2.QuerySet对象 查询的结果集就是一个QuerySet对象 QuerySet对象就像是一个列表,列表存储着查询出的结果,可以迭代,可以切片 Django中QuerySet对象是惰性的,即你得到这个对象的时候并没有真正的在数据库中执行...QuerySet对象的使用是有cache缓存的,即遍历第二次QuerySet对象的时候数据是从缓存中拿的,不会执行SQL语句 如果QuerySet对象数据量特别大,遍历时为了避免占用大量cache空间,

    1.7K30

    Django后台管理之Admin actions自定义

    通常情况下,admin的工作模式是“选中目标,然后修改目标”,但在同时修改大量目标的时候,这种模式就变得重复、繁琐。 为此,admin提供了自定义功能函数actions的手段,可以批量对数据进行修改。...但在多数情况下,你要自己遍历queryset的每个元素,并编写具体的操作。...要实现这个功能,只需要在action方法中返回一个HttpResponse(或它的子类)。...例如下面是一个利用Django内置的序列化函数将一个对象保存为json格式的范例: from django.http import HttpResponse from django.core import...要实现这一功能,你需要使用内置的AdminSite.add_action方法: AdminSite.add_action(action, name=None)[source] from django.contrib

    2.6K50

    Django学习笔记之Queryset详解

    QuerySet实例,QuerySet是一个可遍历结构,包含一个或多个元素,每个元素都是一个Model 实例,它里面的方法也是表级方法,前面说了,Django给我们提供了增加表级方法的途径,那就是自定义...manager类,而不是自定义QuerySet类,一般的我们没有自定义QuerySet类的必要;django.db.models模块中的Model类,我们定义表的model时,就是继承它,它的功能很强大...一个QuerySet包含一个或多个model instance。QuerySet类似于Python中的list,list的一些方法QuerySet也有,比如切片,遍历。...在代码1中,在遍历a前,先执行a对应的SQL,拿到数据后,然后再遍历a,而遍历过程中,每次都还要查询数据库获取关联表。...代码2中,当遍历开始前,先拿到Entry的QuerySet,并且也拿到这个QuerySet的每个object中的blog对象,这样遍历过程中,就不用再查询数据库了,这样就减少了数据库读次数。

    3.7K30

    数据工厂平台-3:首页超链接

    第二种:用npm下载vue和其组建,然后用vue创建一个前端项目,此项目和django项目基本同级,可进行前后端分离的大型方案。...这样新读者可以更快速简单的了解和使用vue,而不是90%都卡在了部署和理解上,毕竟学习要一步一步来,0基础的同学第一次就打造企业级的大型项目,估计一个部署就被打击的体无完肤了。...接下来我们来明白什么是vue: 为什么都喜欢用?其实就是前端的数据和展示等绑定处理上非常方便简单,本质是对复杂麻烦的js/jq进行封装的一个框架。...而刚刚写的传统方式,是把后台来的数据放到了dom层直接用{{ }} 来使用的。 既然vue的数据是要放在bom 也就是script内进行使用,那么整个数据从后端起就要更改格式!为什么呢?...因为我们目前的数据直接从数据库拿出来的是一个查询集,又叫queryset格式,它并不是传统代码认识的格式,不是list列表,里面的也不是dict字典,只是看起来像,并且可以和列表一样遍历,和字典一样拿值罢了

    96120

    Django性能之道:缓存应用与优化实战

    在Django中,缓存是一个核心功能,它允许开发者轻松地将经常访问的数据存储在内存中,以便快速检索。...QuerySet缓存 Django的QuerySet具有缓存机制,这意味着在首次执行QuerySet时,Django会将结果缓存起来,以便在后续的相同查询中直接使用缓存结果,而不是再次执行数据库查询。...这适用于大量数据或者数据更新频繁的情况。...下面以一个电子商务网站为例,进行缓存优化案例分析: 场景描述: 电商网站的首页包含热门商品展示、推荐商品、促销活动等信息,每天有大量用户访问。...商品详情页面缓存: 对商品详情页面中的商品信息、评价等内容进行缓存,设置合理的过期时间。 使用懒加载策略,只在用户访问时加载缓存数据,减少不必要的缓存占用。

    1.1K10

    Django-官网查询部分翻译(1.11版本文档)-QuerySet-字段查找-06

    把 add 方法解释一下(对象可以直接传,如果是值,要传元组?) ......by accessing the database,翻不出来) 触发 QuerySet 让其真正执行数据库操作的几种情况 迭代(for 循环遍历) 加了步长的切片操作、索引取值、get、all、first...新创建的 QuerySet 的缓存(cache)是空的,QuerySet 第一次取值执行(evaluatad)的时候进行数据库查询操作,Django 会将查询结果保存到 QuerySet 的 cache...后续取值可以复用 QuerySet 的缓存结果。 # 下面的这两行代码会走两次数据库操作,很可能他们两次得到的数据是相同的。 # 为什么我们不避免它呢?...自定义字段查找(custom field-lookups) 一般官方提供的这些就已经完全够用了,真的要自定义了再去文档里看吧 单词 每个翻译文档后面都写出来,方便查看 后续再整合到一篇博客上,

    3.4K20

    Django ORM:天使与魔鬼

    一般直接用来做 Response 没有问题,但是要知道 QuerySet 是不能被 pickle 的,如果使用到 Django Cache 之类功能,直接用 values() 当作返回会死得很惨。...,只能注意 + 规避,详见: QuerySet API reference | Django documentation | Django Django provides a range of refinement...print(type(f2.created)) 通过以上的例子就能知道,我们自己创建的内存对象 f1 和通过 orm 拿出来的内存对象 f2 完全不是同一个东西,虽然他们都可以操作同一条数据库记录,但如果在内存对象里做比较就会有很多问题...天使的眼泪 巧用 extra QuerySet API reference | Django documentation | Django Django provides a range of refinement...如果手动处理,需要将整个表的字段放到内存,并做唯一校验,非常麻烦且耗时。

    1.2K40

    Django匆匆一眼却解答了多年疑惑

    Django 是 Python 的 一款 Web 开发框架,另外还有 Tornado,Flask,Twisted。为什么我要选择学 Django?...新闻编辑室的开发节奏是非常快的,正因如此,Django 相比于其他框架的特点就是短、平、快。这也符合 Python 的风格。时至今日,Django 已经发展到了 3.1.3 版本。...我们都知道程序是运行在内存中的,跑完就没了。为了把数据保存下来,就需要使用 ORM 技术把内存中的数据(程序对象)存到关系型数据库中,进而转移到磁盘上。Django 自带了一个 ORM,开箱即用。...', reporter=r) >>> a.save() # 表 Article 也有数据了 >>> Article.objects.all() QuerySet [Django...__startswith='John') QuerySet [Django is cool>]> # 赋值后调用 save() 函数更新数据 >>> r.full_name =

    1K10

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

    一、查询基础QuerySet 详解Django 中通过模型类的 Manager 构建 QuerySet 来检索数据库对象,其核心特性包括:代表数据库中对象的集合可通过过滤器缩小查询范围具有惰性执行特性(...检测方法Django Debug Toolbar:直观显示请求中的 SQL 查询日志记录:配置日志记录 SQL 语句性能分析工具:如 Django Silk 分析查询性能解决方案方法 1:使用 select_related...(返回一个 ValuesListQuerySet 对象,其中每个元素是一个元组),内存占用更低books = Book.objects.values_list('title', 'author')for...,字典的键为字段名,值为字段对应的数据返回一个包含元组的查询集,元组中的元素依次对应指定字段的值 内存占用 相对较高,因为字典需要存储键值对信息 通常更节省内存...="John"))查看生成的 SQL调试时可查看 QuerySet 生成的 SQLqueryset = Book.objects.filter(author="John")print(queryset.query

    24010
    领券