数据库查询优化

it2023-08-21  69

ORM语句的特点

惰性查询:如果仅仅是编写了orm语句,后面没用到该语句查询出来的参数,那么orm会自动识别,不发起sql查询语句。(只有使用了才会去数据库查询数据)

1: only和defer # res = models.Book.objects.all() res = models.Book.objects.only('title') # print(res.title) # 不会走数据库 print(res.authors) # 走数据库 """ 查询only括号里面的字段不会重新走数据库, 而only括号里面没有的字段会重新走数据库查询 """ res = models.Book.objects.defer('title') print(res.title) # 会走数据库 print(res.authors) # 不走数据库 """ defer和only相反 """ 2:select_related 和 prefetch_related res = models.Book.objects.select_related('publish') """ (内部实现是联表查询) select_related内部先将book和publish表连起来, 然后一次性将大表中的所有数据封装给查询出来的对象。 这时候对象点book表中数据还是publish表中数据都不需要再走数据库查询了 注:select_related中只能放外键字段,而且表关系只能是一对一或者一对多,多对多不行。 """ res = models.Book.objects.prefetch_related('publish') """ (内部实现是子查询) 将子查询查询的结果封装到对象中 """
最新回复(0)