美文网首页
减少django queryset 加载所有对象的内存开销

减少django queryset 加载所有对象的内存开销

作者: 伍只蚊 | 来源:发表于2018-03-10 20:08 被阅读241次

当使用django ORM时,如果要对某个模型的所有数据库行操作时,即调用all()方法时,返回的数据行数太多,就会占用大量内存,导致问题。
如果使用iterator,分块来加载指定行数的数据,就能有效减少内存的占用。

import gc

def querset_iterator(queryset, chucksize=10000):
    pk = 0 
    last_pk = queryset.order_by('-pk')[0]
    queryset.order_by('pk')
    while pk < last_pk:
        for row in queryset.filter(pk__gt=pk)[:chucksize]:
            # 每次读入内存的行数最大为chucksize
            yield row 
            pk = row.id
        gc.collect()
        # gc垃圾回收

相关文章

  • 减少django queryset 加载所有对象的内存开销

    当使用django ORM时,如果要对某个模型的所有数据库行操作时,即调用all()方法时,返回的数据行数太多,就...

  • Python Web框架 Django - Django查询相关

    django查询 filter:查询满足条件的对象,得到QuerySet,查询结果不存在时,得到QuerySet[...

  • 结构型模式-享元模式

    开发时,创建对象池,共享对象,减少系统开销 享元模式: 主要用于减少创建对象的数量,以减少内存占用和提高性能。它提...

  • Django中QuerySet对象

    1.1、可切片 使用Python 的切片语法来限制查询集记录的数目 。它等同于SQL 的LIMIT 和OFFSET...

  • RecyclerView+glide的优化

    优化在了哪里? 只有在Reyclerview停止滑动的时候 再加载图片以此来减少内存和网络的开销

  • 线程池

    线程池的定义 减少资源创建 => 减少内存开销,创建线程占用内存 降低系统开销 => 创建线程需要时间,会延迟处理...

  • Django-orm

    Django QuerySet API 官方文档 不返回 QuerySet updata_or_create(de...

  • Java开发时可以提高性能的点

    1、合理的使用设计模式单利模式:控制内存中只存在一个对象可以减少内存、减轻加载负担和时间,提升加载效率。享元模式:...

  • phalcon框架,数据处理优化

    1、phalcon模型结果集支持迭代器,减少内存开销 文档findFirst() 方法直接返回一个被调用对象的实例...

  • 查看Django ORM执行的SQL语句

    查询QuerySet对象执行的SQL语句 查询当前执行的SQL包括Django内置执行的多条执行的SQL语句

网友评论

      本文标题:减少django queryset 加载所有对象的内存开销

      本文链接:https://www.haomeiwen.com/subject/wkmbfftx.html