ORM语句特点:
惰性查询:只有查询到了才会去走数据库
only与defer
only
res=models.Book.objects.only('title')
for i in res:
i.title title为only括号内字段,i.titke的时候不会走数据库
i.price only括号内没有price字段,需要重新走数据库
defer
res=models.Book.objects.defer('title')
for i in res:
res.price price不在defer中,不走数据库,defer与only相反
总结:
only中传的字段就是走数据库查的,返回的res只有这一个字段的内容
而defer中传的字段,不走数据库查询出来,返回的res中有含除了传的字段以外的所有内容
selected_related与prefetch_related 与跨表操作有关
selected_related 联表
res = models.Book.objects.select_related('publish')
for i in res:
res.Publish.name
selected__related内部直接将Book表和Pulish表所有的数据封装
这个时候再要数据的时候就不会走数据库
注意点:只能放外键字段(多对多不行)
res = models.Book.objects.prefetch_related('publish')
for i in res:
res.Publish.name
prefetch_related内部其实是子查询
总结:
selected_related与prefetch_related在使用中
如果两张表很大,在使用selected_related拼表的时候耗时可能会比使用prefetch_relate长
在使用的时候需要视情况而定