但是1.7及以上版本,你可以像和queryset的其他函数一样进行链式操作: >>>zhangs = Person.objects.select_related('hometown__province').select_related('living__province').get(firstname=u"张",lastname=u"三")>>>zhangs.hometown.province>>>zhangs.living.province 如果你在1.7以下版本这样做了,你只会获得...
Django学习笔记之Queryset详解 e in a: print (e.blog.name) len(l) 遍历时,每次都要查询数据库,l长度每次增1,Django提供了方法可以在查询时返回关联表实体,如果是onetoone...或onetomany,那用select_related,不过对于onetomany,只能在主表(定义onetomany关系的那个表)的manager中使用select_related方法,即通过sel...
select_related 是使用 SQL JOIN 一次性取出相关的内容。 prefetch_related 用于 一对多,多对多 的情况,这时 select_related 用不了,因为当前一条有好几条与之相关的内容。 prefetch_related是通过再执行一条额外的SQL语句,然后用 Python 把两次SQL查询的内容关联(joining)到一起 ...
对于一对一字段(OneToOneField)和外键字段(ForeignKey),可以使用select_related 来对QuerySet进行优化 作用和方法 在对QuerySet使用select_related()函数后,Django会获取相应外键对应的对象,从而在之后需要的时候不必再查询数据库了。以上例说明,如果我们需要打印数据库中的所有市及其所属省份,最直接的做法是: >>> city...
(1)select_related()当执行它的查询时它沿着外键关系查询关联的对象数据。它会生成一个复杂的查询并引起性能的消耗,但是在以后使用外键关系时将不需要数据库查询。 (2)prefetch_related()返回的也是QuerySet,它将在单个批处理中自动检索每个指定查找的对象。这具有与select_related类似的目的,两者都被设计为阻止由访问...
在数据库有外键的时候,使用 select_related() 和 prefetch_related() 可以很好的减少数据库请求的次数,从而提高性能。本文通过一个简单的例子详解这两个函数的作用。虽然QuerySet的文档中已经详细说明了,但本文试图从QuerySet触发的SQL语句来分析工作方式,从而进一步了解Django具体的运作方式。
在对QuerySet使用select_related()函数后,Django会获取相应外键对应的对象,从而在之后需要的时候不必再查询数据库了 city_objs = City.objects.all() for cin city_objs: print(c.province) 这样会导致线性的SQL查询,如果对象数量n太多,每个对象中有k个外键字段的话,就会导致n*k+1次SQL查询。在本例中,因为假设...
Django-select_related优化查询 Python 对于一对一字段(OneToOneField)和外键字段(ForeignKey),可以使用select_related 来对QuerySet进行优化。 select_related 返回一个QuerySet,当执行它的查询时它沿着外键关系查询关联的对象的数据。它会生成一个复杂的查询并引起性能的损耗,但是在以后使用外键关系时将不需要数据库查询...
然后在视图中,删除select_related方法调用,因为不需要这样做: @protected_resource() @api_view(['GET']) def getAllTests (request): testListQuerySet = models.TypingTest.objects.all() serializer = serializers.TypingTestSerializer(testListQuerySet, many=True) ...
在Django中,QuerySet代表一组模型对象的数据库查询。它是Django ORM的核心概念之一,允许您以面向对象的方式操作数据库。QuerySet提供了丰富的方法和链式操作,使得查询数据库变得非常方便和灵活。基本用法: 获取所有对象:使用Model.objects.all()可以获取模型中的所有对象。例如,使用MyModel.objects.all()可以获取MyModel...