擅长:python、mysql、java
<p><code>select_related()</code>和<code>prefetch_related()</code>是您的解决方案。它们的工作方式几乎相同,但有一些不同。</p>
<p><code>select_related()</code>通过创建一个SQL连接并在SELECT语句中包含相关对象的字段来工作。因此,<code>select_related</code>获取同一数据库查询中的相关对象。但它只适用于一对一或一对多的关系。示例如下-</p>
<pre><code>entry = Entry.objects.select_related('blog').get(id=5)
or
entries = Entry.objects.filter(foo='bar').select_related('blog')
</code></pre>
<p>另一方面,<code>prefetch_related()</code>对每个关系执行单独的查找,并在Python中执行“连接”。这允许它预取多对多和多对一的对象,这不能使用<code>select_related</code>来完成。因此<code>prefetch_related</code>将只对每个关系执行一个查询。示例如下-</p>
<pre><code>Pizza.objects.all().prefetch_related('toppings')
</code></pre>