首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Web | Django数据库交互,你需要知道 9 个技巧

对开发人员来说,DjangoORM 确实非常实用,但是将数据访问抽象出来本身是有成本,那些愿意在数据库中探索开发人员,经常会发现修改 ORM 默认行为可以带来性能提升。...在大多数 Django 应用程序中,大部分时间都花在等待数据查询上了。所以,在 SQL 查询上设置超时是一个很好的开始。...因为这样它只会影响工作进程,不会影响进程外分析查询,cron 任务等。 希望您使用是持久数据连接,这样每次请求都不会再有连接开销。...事务操作通常会涉及用户和产品一些属性,所以我们经常使用 select_related 强制 join 并保存一些查询。 更新交易还会涉及获得一个锁确保它不被别人获得。 现在,你看到问题了吗?...当 select_for_update 与 select_related 一起使用时,Django尝试获取查询中所有表锁。 我们用来获取事务代码尝试获取事务表、用户、产品、类别表锁。

2.8K40

DjangoDjango ORM 学习笔记

通过使用 ORM,我们只需要操作 Author 和 Blog 对象,而不用操作相关数据库表。这里主要介绍一下 Django ORM 相关使用。...默认 Manager 对象名称为 objects,下面是使用 Manager 进行增删改查一个示例: def save_blog(): # 使用 get 检索数据时,如果数据不存在,会报...关联查询就是在查询当前实例同时,把其关联实例数据也一块取出来。在下图中 orm_blog 通过一个外键和 orm_author 关联。...和 select_related 类似,prefetch_related 在查询时会同时取出关联实例。...与 select_related 不同是 prefetch_related 不使用 JOIN 方式查询数据库,而是分别查每个表,最后使用 Python 实现 JOIN 操作。

2.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

浅谈优化Django ORM性能问题

数据库 (缺少索引/数据模型) 数据存储接口 (ORM/低效查询) 展现/数据使用 (Views/报表等) Web应用大部分问题都会跟 数据库 扯上关系。...关联查询问题 Django ORMAPI使得我们使用关系型数据时候就像使用面向对象 Python 语言那样自然。...SQL一会为每行返回重复信息。 如果你进行一个查询,其中select_related 查询所有都是相同,你就需要使用别的东西。...Django ORM关联查询非常好用,我们自然希望使用这种方式。在一个循环中,如果不使用 select_related 或者 prefetch_related,可能会导致几百个查询。...我们已经知道了这个问题,那么怎样拓展Django能让我们更明确知道资源消耗呢。很多数据封装已经通过不同方式解决了这个问题。

1.7K30

Django之QuerySet详解

若要按照另外一个模型中字段排序,可以使用查询关联模型语法。即通过字段名称后面跟两个下划线(__),再加上新模型中字段名称,直到希望连接模型。...' values()和values_list()都用于特定情况下优化:检索数据子集,而无需创建模型实例。...这会生成一个复杂查询并引起性能损耗,但是在以后使用外键关系时将不需要再次数据查询。 下面的例子解释了普通查询select_related()查询区别。...还可以使用正常连接语法执行相关字段相关字段。...当最初获取数据时不知道是否需要这些特定字段情况下,如果正在使用查询结果,可以告诉Django不要从数据库中检索它们。

2.3K20

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

缓存键(Cache Key) :每个缓存对象都有一个唯一缓存键,开发者可以通过缓存键存储和检索缓存数据。...获取缓存数据:cache.get(key)方法用于从缓存中检索数据,根据缓存键获取对应。 删除缓存数据:cache.delete(key)方法用于删除指定缓存键对应数据。...AD:漫画首页 数据查询优化是提高Web应用性能关键环节。在Django中,通过优化QuerySet和ORM查询,可以显著提升数据库操作效率。 1....QuerySet缓存 DjangoQuerySet具有缓存机制,这意味着在首次执行QuerySet时,Django会将结果缓存起来,以便在后续相同查询中直接使用缓存结果,而不是再次执行数据查询。...ORM查询优化策略 使用select_related和prefetch_related:这两个方法可以减少数据查询次数。

8610

提升Django性能数据库优化与ORM调优技巧详解

在开发基于DjangoWeb应用程序时,数据库是至关重要组成部分之一。DjangoORM(对象关系映射)为开发者提供了便利,使得与数据交互变得简单且直观。...使用索引 索引是提高数据查询效率关键。在Django中,可以通过在模型字段上添加db_index=True为字段创建索引。...使用Raw SQL 在某些情况下,使用原生SQL语句可能比ORM更高效。Django允许执行原生SQL查询,这在需要进行复杂数据操作时非常有用。...监控和调优 持续监控数据性能并进行调优是保证应用程序高效运行重要手段。可以使用一些监控工具实时监测数据负载、查询性能等指标,并根据监控数据进行调整和优化。...通过不断地优化数据库和ORM性能,可以使Django应用程序在面对日益复杂业务需求和高并发访问时依然保持高效稳定运行状态,为用户提供更好服务体验。

23420

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

网站:http://python.usyiyi.cn/django/index.html 数据库访问优化 Django数据库层提供了很多方法帮助开发者充分利用他们数据库。...注意,设计最好索引方案是一个复杂数据库相关的话题,它取决于你应用细节。持有索引副作用可能会超过查询速度上任何收益。 合理使用字段类型。 我们假设你已经完成了上面这些显而易见事情。...用唯一被或索引检索独立对象 有两个原因在get()中,用带有unique或者db_index检索独立对象。首先,由于查询经过了数据索引,所以会更快。...使用QuerySet.update()和delete() 通过QuerySet.update()使用批量SQL UPDATE语句,而不是获取大量对象,设置一些再单独保存。...如果一个模型具有默认顺序(Meta.ordering),并且你并不需要它,通过查询集上无参调用order_by() 移除它。 向你数据库添加索引可能有助于提升排序性能。

1.1K30

Django ORM:天使与魔鬼 II

Django 中我们通常会使用 selected_related 或prefetch_related 预取关联对象,减少和 DB 之间交互,但是在使用上也需要有一些注意地方。...Django 默认查询方式都是粗放,例如普通查询使用 values 或者 only 时都是 select * ,而预取也不例外,看看下面这个例子。...此时在后续循环处理中,我们需要通过 Foo 对象查询到 Baz 数据,为了避免 N + 1 我们也会多级预取: Foo.objects.filter().select_related("bars")...所以也会有一些完全不使用 ORM 观点。...在我看来,ORM 能让 90% 查询都变得结构化更清晰、更易维护、甚至更安全,但剩下 10% 也许会耗费更多精力,所以何时使用 ORM 是根据具体项目场景,不能因噎废食。

70550

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

ORM简介 MVC或者MVC框架中包括一个重要部分,就是ORM,它实现了数据模型与数据解耦,即数据模型设计不需要依赖于特定数据库,通过简单配置就可以轻松更换数据库,这极大减轻了开发人员工作量...='nick' where id = 1 方法二适合更新一条数据,也只能更新一条数据,当只有一条数据更新时推荐使用此方法,另外此方法还有一个好处,我们接着往下看 具有auto_now属性字段更新...因为执行数据库同步语句时候,django会找这里面所有的应用,找到他们models创建表 'django.contrib.auth', 'django.contrib.contenttypes...)                  order_by(*field): queryset类型数据调用,对查询结果排序,默认是按照id升序排列,返回还是queryset类型...2. select_related使用SQLJOIN语句进行优化,通过减少SQL查询次数来进行优化、提高性能。

3K10

Django数据查询优化与AJAX

orm相关数据查询优化 惰性查询 惰性查询指当我们只查数据库而不是用这些数据时,Django不会执行查询数据代码,目的是减少不必要数据库操作,降低数据压力。...这样做好处:跨表查询也不需要重复走数据库,减轻数据库压力。select_related()括号内放多个外键字段,逗号隔开,会将多个外键字段关联表与当前表拼成一张大表。...AJAX应用场景 搜索引擎根据用户输入关键字,自动提示检索关键字,网站注册时候实时用户名查重,特点: 不刷新页面的前后端数据交互 异步操作,当请求发出后,浏览器还可以进行其他操作 AJAX前知识储备...,更易理解 * JSON 使用 JavaScript 语法描述数据对象,但是 JSON 仍然独立于语言和平台。...Django内置serializers模块 前端想拿到通过orm查到一个个对象,(数据库里一条条记录),后端想把直接实例化出来对象发送给前端,这时候就需要用到Django给我们提供序列法方式(

2.4K20

Django实践-07日志调试,Django-Debug-Toolbar配置与sql优化

“N+1查询”),原本获取老师数据只需要一条SQL,但是由于老师关联了学科,当我们查询到N条老师数据时,DjangoORM框架又向数据库发出了N条SQL去查询老师所属学科信息。...在一条SQL中可以基于连接查询完成老师和学科查询。...在使用DjangoORM框架时可以基于如下方法: 对于多对一关联(如投票应用老师和学科),我们可以使用QuerySetselect_related()方法加载关联对象; 而对于多对多关联...可以用QuerySetonly()方法指定需要查询属性,也可以用QuerySetdefer()方法指定暂时不需要查询属性,这样生成SQL会通过投影操作指定需要查询列,从而改善查询性能,...('good_count'), bad=Avg('bad_count')) 可见,DjangoORM框架允许我们用面向对象方式完成关系数据库中分组和聚合查询

22510

什么是ORMN+1

这篇我们解释什么是N+1问题,在所有的ORM中,这都会是一个问题,新手很容易踩到坑。进而导致系统变慢,然后拖垮整个系统。...接下来我们有一个需求,展示一个文章列表页,列表页上展示信息包括:文章标题,文章作者名称。就这两个字段,也不需要分页。 我们要查询出这样数据要怎么做呢。...在ORM世界中,我们直观做法是这样: posts = Post.objects.all() # 获取所有的文章数据,注意此时不会执行sql语句 by the5fire result = []...SELECT t1.title, t2.name from post as t1 INNER JOIN user as t2 ON t2.id = t1.owner_id; 想到这里,是不是觉得ORM有时候挺碍事...其实现在ORM框架基本都提供了解决方案,比如Django中,对这类问题就是通过select_related解决。

67420

Django框架理解和使用常见问题

事件循环 7、select_related和prefetch_related,Q和F select_related:一对多使用查询主动做连表...prefetch_related:多对多或者一对多时候使用,不做连表,做多次查询 Q:用于构造复杂查询条件 F:更新时用于获取原来,专门取对象中某一列进行操作...优点:摆脱复杂SQL操作,适应快速开发,让数据结果变得简单,数据库迁移成本更低 缺点:性能较差,不适用于大型应用,复杂SQL操作还需要通过SQL语句实现...17、对Django认识 Django是走大而全方向,它最出名是其全自动化管理后台:只需要使用ORM,做简单对象定义,它就能自动生成数据库结构、以及全功能管理后台。...Django内置ORM跟框架内其他模块耦合程度高。应用程序必须使用Django内置ORM,否则就不能享受到框架内提供种种基于其ORM便利。

1.3K20

Django学习笔记之Queryset详解

Django ORM用到三个类:Manager、QuerySet、Model。...或onetomany,那用select_related,不过对于onetomany,只能在主表(定义onetomany关系那个表)manager中使用select_related方法,即通过select_related...正向连接 OneToOne关系也是这样关联查询,可以看到,Django对OneToOne、OneToMany、ManyToMany关联查询及其反向关联查询提供了相同方式,真是牛逼啊。...只返回主表(即Author表)所有字段,即使在查询时关联了其它表,关联表字段也不会返回,只有当我们通过Author instance用关联表时,Django才会再次查询数据库获取值。...select_related是用select ……join返回关联表字段,而prefetch_related是用多条SQL语句形式查询,一般,后一条语句用IN调用上一句话返回结果。

2.7K30

8个方法极速提高Django网站速度

编程应用、实战教程,不容错过 在Django应用部署上线之后,随着用户量和数据增多,网站可能会越来越慢,这时候对应用性能进行优化就是一个首要问题。...五、减少查询次数 DjangoORM使用起来非常简便,简便背后则是其隐藏了大量复杂性。特别是在涉及到多表之间关系查询时,特别容易产生大量数据查询。...借助于Django ORM提供一些高级功能,我们能够从某种程度上改善这种情况,将调用查询数据减少。 例如,我们可以借助select_related()查询集方法将涉及外键查询合并为一个查询。...下面是官方示例: 在正常情况下,我们可能需要使用两条数据查询: # 先去数据库查Entry表 e = Entry.objects.get(id=5) # 再去数据查询相关Blog对象 b =...DjangoORM中提供了一些查询集方法让我们避免这个问题。

3.2K30

Django ORM详解

obj.id  obj.name.....就是数据库一行数据一部分数据 ORM--First: 我们在学习djangoorm时候,我们可以把一对多,多对多,分为正向和反向查找两种方式。...马上就要开始我们orm查询之旅!!! 建表+配置url+views中写相应函数 models.py(在django中仅且只能在这里写数据相关类) ?...djangofilter方法是从数据取得匹配结果,返回一个对象列表,如果记录不存在的话,它会返回[]。 ? ORM一对多: 我们在设计表结构时候什么时候使用一对多呢?...ORM连表操作梳理: 一、一对多创建   1、创建数据     通过对象创建     或者通过对象字段_id创建   2、查找     正向查找       在通过filter时候跨表使用 双下划线...DjangoF和Q F:用来批量修改数据使用查询条件) demo:比如我有个price这个列,我想让price自增10或者某一些自增10 ?

1.7K100

Django项目知识点(四)

json键值对,而不是列表 request.body就是form表单数据 Queryset Django ORM用到三个类:Manager、QuerySet、Model。...QuerySet实例 就是从数据库根据自己要求拿数据数据都那不出来,写啥视图 所以在编写queryset必须用django shell 调试 在model中,Django通过给Model增加一个objects...属性提供数据操作大接口。...() 如果我要拿这个模型通过外键绑定另外一个模型,使用select_related course 模型定义了teacher字段绑定teacher模型 course = Course.objects.only...这样就可以引用模型字段使用它们执行数据库操作,而无需实际将它们从数据库中拉出到Python内存中 说白了就是我从数据库拿东西,但是有些需要字段没有,要通过绑定外键appmodel拿。

1.6K30

【Python全栈100天学习笔记】Day46 导入导出Excel报表和配置日志

具体做法是后端通过提供数据接口返回统计图表所需数据,前端使用ECharts渲染出柱状图、折线图、饼图、散点图等图表。例如我们要生成一个统计所有老师好评数和差评数报表,可以按照下面的方式做。...ORM框架又向数据库发出了N条SQL去查询老师所属学科信息。...是的,我们可以使用连接查询,但是在使用DjangoORM框架时如何做到这一点呢?...对于多对一关联(如投票应用老师和学科),我们可以使用QuerySetselect_related()方法加载关联对象;而对于多对多关联(如电商网站中订单和商品),我们可以使用prefetch_related...可以用QuerySetonly()方法指定需要查询属性,也可以用QuerySetdefer()方法指定暂时不需要查询属性,这样生成SQL会通过投影操作指定需要查询列,从而改善查询性能,

60920

07.Django学习之model进阶

当你确实需要结果时,查询通过访问数据求值。 关于求值发生准确时间,参见何时计算查询集。   缓存机制 每个查询集都包含一个缓存最小化对数据访问。...select_related 返回一个QuerySet,当执行它查询时它沿着外键关系查询关联对象数据。它会生成一个复杂查询并引起性能损耗,但是在以后使用外键关系时将不需要数据查询。...简单说,在对QuerySet使用select_related()函数后,Django会获取相应外键对应对象,从而在之后需要时候不必再查询数据库了。...nid" = 1; 总结 select_related主要针一对一和多对一关系进行优化。 select_related使用SQLJOIN语句进行优化,通过减少SQL查询次数来进行优化、提高性能。...可以通过可变长参数指定需要select_related字段名。也可以通过使用双下划线“__”连接字段名实现指定递归查询

2K30
领券