python mysql l链式查询_Python的Django框架中的select_related函数对QuerySet 查询的优化...

本文介绍了Django的select_related()函数如何优化数据库查询,特别是在处理一对一和一对多关系时。通过实例展示了如何使用select_related避免线性SQL查询,减少数据库访问次数,提高性能。同时,解释了不同用法,包括使用字段参数、深度参数以及无参数调用,并对比了Django 1.7前后版本的区别。
摘要由CSDN通过智能技术生成

1. 实例的背景说明

假定一个个人信息系统,需要记录系统中各个人的故乡、居住地、以及到过的城市。数据库设计如下:

201541150650059.jpg?20153115713

Models.py 内容如下:

from django.db import models

class Province(models.Model):

name = models.CharField(max_length=10)

def __unicode__(self):

return self.name

class City(models.Model):

name = models.CharField(max_length=5)

province = models.ForeignKey(Province)

def __unicode__(self):

return self.name

class Person(models.Model):

firstname = models.CharField(max_length=10)

lastname = models.CharField(max_length=10)

visitation = models.ManyToManyField(City, related_name = "visitor")

hometown = models.ForeignKey(City, related_name = "birth")

living = models.ForeignKey(City, related_name = "citizen")

def __unicode__(self):

return self.firstname + self.lastname

注1:创建的app名为“QSOptimize”

注2:为了简化起见,`qsoptimize_province` 表中只有2条数据:湖北省和广东省,`qsoptimize_city`表中只有三条数据:武汉市、十堰市和广州市

2. select_related()

对于一对一字段(OneToOneField)和外键字段(ForeignKey),可以使用select_related 来对QuerySet进行优化

作用和方法

在对QuerySet使用select_related()函数后,Django会获取相应外键对应的对象,从而在之后需要的时候不必再查询数据库了。以上例说明,如果我们需要打印数据库中的所有市及其所属省份,最直接的做法是:

>>> citys = City.objects.all()

>>> for c in citys:

... print c.province

...

这样会导致线性的SQL查询&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值