千家信息网

django中的orm优化详细介绍

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要讲解了"django中的orm优化详细介绍",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"django中的orm优化详细介绍"吧!orm优化
千家信息网最后更新 2026年11月01日django中的orm优化详细介绍

这篇文章主要讲解了"django中的orm优化详细介绍",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"django中的orm优化详细介绍"吧!

orm优化

1.数据库技术进行优化,包括给字段加索引,设置唯一性约束等等;

2.查询过滤工作在数据库语句中做,不要放在代码中完成(看情况);

3.如果要一次查询出集合的数量,使用count函数,而不是len函数,但是如果后面还需要到集合,那就用len,因为count还需要进行一次数据库的操作;

4.避免过多的使用count和exists函数;

5.如果需要查询对象的外键,则使用外键字段而不是使用关联的外键的对象的主键;

例子:

a.b_id # 正确a.b.id # 错误

6.在通过all语句查询时,不要做跨表查询,只查询当前表中有的数据,否则查询语句的性能会下降很多;

比如:a表存在外键b表

a.b.all() # 错误

7.如果想要查询其他表的数据,则加上select_related(ForeignKey字段名,其实就是主动联表查询,性能也会下降),如果有多个,则在括号中加上;

8.加only参数是从查询结果中只取某个字段,而另外一个defer方法则是从查询结果中排除某个字段;

9.不要获取你不需要的东西,可以通过values和value_list实现;

values返回的是字典数组,比如:[{'key1': value1, 'key2': value2}, {'key1': value3, 'key2': value4}]value_list返回的是tuple数组 [('value1', 'value2'), ('value3', 'value4')]value_list+flat=True返回的是数组 ['value1', ...]

10.如果想知道是否存在至少一个结果,使用exists,而不是使用if QuerySet;但是如果后面需要用到前面的QuerySet,那就可以使用if 判断;

 # Don't waste a query if you are using the querysetbooks = Book.objects.filter(..)if len(books) > 5: do_stuff_with_books(books)# If you aren't using the queryset use countbooks = Book.objects.filter(..)if books.count() > 5: do_some_stuff()# But neverif len(Book.objects.filter(..)) > 5: do_some_stuff()

11.在任何位置使用QuerySet.exists()或者QuerySet.count()都会导致额外的查询;

12.不要做无所谓的排序,排序并非没有代价,每个排序的字段都是数据库必须执行的操作;

13.如果要插入多条数据,则使用bulk_create来批量插入,减少sql查询的数量;

14.对于缓存的QuerySet对象使用with标签,可以让数据被缓存起来使用;

15.使用QuerySet.extra明确的指出要查询的字段;

16.批量的更新和删除则使用Queryset.update和delete函数,但是更新操作注意对象的缓存;

17.使用QuerySet.Iterator迭代大数据;

当你获得一个queryset的时候,django会缓存下来,保存在内存中,如果需要对queryset进行多次的循环,那么这种缓存无可厚非; 但是如果你只需要进行一次的循环,那么其实并不需要缓存,这个使用就可以使用iterator;

比如:

for book in Books.objects.all().iterator():  do_stuff(book)

18.如果想判断是否存在外键,只需要判断外键的id即可;

19.不要在循环中查询,而是提前取出,并且做好映射关系,这样在循环中直接通过字典的形式获取到;

20.当计算出一个QuerySet的时候,如果还需要进行多次循环的话,则可以先保留着这个缓存,但是如果只是使用一次的话,没有必要使用到缓存;

python优化:

1.排序尽量使用 .sort(), 其中使用 key 比 cmp 效率更高

感谢各位的阅读,以上就是"django中的orm优化详细介绍"的内容了,经过本文的学习后,相信大家对django中的orm优化详细介绍这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

查询 数据 缓存 字段 循环 函数 对象 数据库 排序 数组 结果 语句 学习 内容 字典 就是 性能 情况 数量 时候 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 百单网互联网科技有限公司怎么样 工业互联网科技新基建 重庆互联网络科技 互联网科技的 北京互联网科技 猪兼强互联网科技 互联网与未来科技 苏州大垚互联网科技 火传媒上海互联网科技 湖南洣水互联网科技有限公司扣款 互联网科技实习生岗位职责 互联网科技人工智能实验室 佛山市翊博互联网络科技有限公司 沐思想互联网科技有限公司 云南省自由互联网科技有限公司 厦门江牛科技互联网 上海互联网科技公司ppt 长沙易易互联网科技有限公司 科技美学互联网 艺术 山东亿川互联网科技有限责任公司 广东万易互联网科技有限公司惠州分公司 互联网公司 科技公司 互联网科技小贷 广州凡科互联网科技 晓花互联网科技有限公司网址 深圳艾果互联网通讯科技 佛山市拉法互联网科技有限公司 工业互联网等科技实现智能化赋能 银川新华互联网科技学校是国营吗 北京互联网科技类企业分布
0