隐藏页面特效

queryset高级用法:prefetch_related

这个方法和select_related方法类型,就是访问多个表中的数据的时候,减少查询的次数。这个方法是为了解决一对多和多对多的关系的查询问题。比如要获取标题中带有hello字符串的文章以及它的所有标签。示例代码

from django.db import connection articles = Article.objects.prefetch_related('tag_set').filter(title__contains='hello') print(articles.query) # 通过这条命令查看底层执行的sql语句 for article in articles: print('title:', article.title) print(article.tag_set.all()) # 通过以下代码可以看出以上代码的sql语句 for sql in connection.queries: print(sql)

但是如果在使用article.tag_set的时候,如果又创建了一个新的QuerySet那么会把之前的sql优化给破坏掉。比如以下代码:

tags = Tag.objects.prefetch_related('articles') for tag in tags: articles = tag.articles.filter(title__contains='hello') #因为filter方法会重新生成一个QuerySet,因此会破坏掉之前的sql # 通过以下代码,我们可以看到在使用了filter,它的sql查询会更多,而没有使用filter,只有两次sql查询 for sql in connection.queries: print(sql)

__EOF__

本文作者404 Not Found
本文链接https://www.cnblogs.com/weiweivip666/p/13837677.html
关于博主:可能又在睡觉
版权声明:转载请注明出处
声援博主:如果看到我睡觉请喊我去学习
posted @   我在路上回头看  阅读(227)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示