Django框架(十一、ORM补充)

本文介绍了Django框架中ORM的高级使用技巧,包括select_related提高查询效率,order_by和reverse进行排序操作,defer与only进行字段选择,以及using指定数据库连接。通过这些方法,可以更好地管理和优化数据库查询。

select_related(self, *fields)

def select_related(self, *fields)
     性能相关:表之间进行join连表操作,一次性获取关联的数据。
     model.tb.objects.all().select_related()
     model.tb.objects.all().select_related('外键字段')
     model.tb.objects.all().select_related('外键字段__外键字段')
    

################################################################
"""
    从sql语言中来分析select_related():
    	model.tb.objects.all()的sql语言就是 select * from tb
    	model.tb.objects.all().select_related('外键字段')的事情了语言是select * from tb left join 外键表 on tb.外键字段_id = 外键表.id
	该方法能够减少获取外键连表的请求数据库次数,能够提高程序的执行效率。
"""

order_by() 和 reverse()方法

def order_by(self, *field_names)
    # 用于排序
    models.UserInfo.objects.all().order_by('-id','age')

 def reverse(self):
    # 倒序
    models.UserInfo.objects.all().order_by('-nid').reverse()
    # 注:如果存在order_by,reverse则是倒序,如果多个排序则一一倒序


    # order_by("-字段")和order_by().reverse()两种方法都是倒序,需要注意的是,reverse()一定要在order_by()方法下才能使用

defer() 和 only()方法

 def only(self, *fields):
    #仅取某个表中的数据
     models.UserInfo.objects.only('username','id')
     或
     models.UserInfo.objects.filter(...).only('username','id')
 
def defer(self, *fields):
    models.UserInfo.objects.defer('username','id')
    或
    models.UserInfo.objects.filter(...).defer('username','id')
    #映射中排除某列数据
    
def values(self, *fields):
    # 获取每行数据为字典格式
    models.UserInfo.objects.all().values('username','id')

def values_list(self, *fields, **kwargs):
	models.UserInfo.objects.all().values_list('username','id')
    # 获取每行数据为元祖

"""
   only拿到的数据是一个对象,并且是只包含“id,和user”的对象:[obj(id),obj(user)]
   defer拿到的数据也是一个对象,映射中排除了指定的某列数据
   
    需要注意的是,未拿到的数据也可以通过  obj.字段  的方式获取值,不过该方式会重新再发一次请求,影响效率
   value拿到的是一个字典,
   value_list拿到的是一个元组
   
"""

using()方法

 def using(self, alias):
    models.Person.objects.all().using(alias="default")
    #指定使用的数据库,参数为别名(setting中的设置)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值