在Django ORM(对象关系映射)中,select_related 和 prefetch_related 是两种用于优化数据库查询性能的方法,它们都旨在减少数据库查询的次数,但它们的实现方式和适用场景有所不同。
select_related
select_related 用于执行多表联查(JOIN),将相关的记录一起从数据库中取出。它主要适用于一对一和多对一的关系,但也可以用于外键关系中的多对多(尽管在这种情况下效果可能不如预期,因为多对多关系通常涉及中间表)。
示例:
假设我们有两个模型,Book 和 Author,其中 Book 有一个外键指向 Author。
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
如果我们想查询所有书籍及其作者的名字,我们可以使用 select_related 来优化查询:
books = Book.objects.select_related('author').all()
for book in books:
print(book.title, book.author.name)

最低0.47元/天 解锁文章
970

被折叠的 条评论
为什么被折叠?



