Django的defer和only方法详解

Django ORM自带的defer和only方法虽说不像filter, exclude, order_by这几个方法那么常见,但用起来还是可以优化数据库查询的。今天小编我就带你看看如何使用这两种方法。

Defer方法

Defer方法的用途是查询数据库时跳过指定的字段,比如下面查询时将跳过每篇Entry的headline和body字段。当你不需要在查询结果中使用headline和body字段时,使用defer方法可以防止将headline和body载入内存,从而节省空间。一篇文章可能没啥关系,但文章很多时,节省的内存空间不可忽视。

Entry.objects.defer("headline", "body")

Defer方法可以和filter, exclude方法联用,其顺序无关紧要,如下所示:

Entry.objects.defer("body").filter(rating=5).defer("headline")

如果你要载入所有字段,只需要设置defer(None)

my_queryset.defer(None)

Only方法

Only方法与defer方法作用类时,只不过only方法是指定需要载入的字段。比如下面查询将只会载入body和pub_date。

Entry.objects.only("body", "pub_date")

使用only方法时一定要非常注意它的顺序,它的执行以最后一个为准。下例将只会载入headline。

Entry.objects.only("body", "rating").only("headline")

only方法与defer方法可以联用,但一定要注意先后顺序。下例只会载入headline。

Entry.objects.only("headline", "body").defer("body")
  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值