`

sqlalchemy在遍历大量结果ORM对象时占用内存问题解决

阅读更多

python在内存管理上有一个特点,分配出去的内存,及时对象的引用计数为0,也不会立即释放内存,而是作为内存缓存,等待下次分配,到某个时机才会回收内存,因此在使用sqlalchemy的时候,如果查询结果包含大量结果(大于1000个),需要遍历每个ORM的时候,调用query().all()方法会导致内存激增(sqlalchemy会把所有对象放在内存中),下面是遍历290000+条记录的内存激增:

[I 160802 18:17:05 xxxx:134] c6833 Memory:   3.7%   662M/7870M
[I 160802 18:18:53 xxxx:140] c6833 after xxxx
[I 160802 18:18:53 xxxx:141] c6833 Memory:  29.7%  2716M/7870M

改用query().yield_per(1000)之后,内存分配就不会那么多了:

[I 160802 18:12:15 xxxx:134] b1213 Memory:   2.9%   600M/7870M
[I 160802 18:13:39 xxxx:140] b1213 after xxxx
[I 160802 18:13:39 xxxx:141] b1213 Memory:   9.4%  1112M/7870M

 

官方手册对于yield_per的描述如下:

sqlalchemy官方手册写道
The purpose of this method is when fetching very large result sets (> 10K rows), to batch results in sub-collections and yield them out partially, so that the Python interpreter doesn’t need to declare very large areas of memory which is both time consuming and leads to excessive memory use. The performance from fetching hundreds of thousands of rows can often double when a suitable yield-per setting (e.g. approximately 1000) is used, even with DBAPIs that buffer rows (which are most). 

sqlalchemy官方手册:http://docs.sqlalchemy.org/en/latest/orm/query.html

 

 

 

分享到:
评论

相关推荐

    Python 进阶(三):Python使用ORM框架SQLAlchemy操作Oracle数据库

    本文主要介绍Python使用ORM框架SQLAlchemy操作Oracle数据库。 1. 安装Oracle Instant Client 2. 安装依赖库 使用以下命令来安装SQLAlchemy和cx_Oracle库: pip install SQLAlchemy pip install cx_Oracle 3.创建...

    Python库 | SQLAlchemy-ORM-tree-0.0.7.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:SQLAlchemy-ORM-tree-0.0.7.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python-sqlakeyset该库实现了SQLAlchemy的基于键集分页包括ORM和核心

    `sqlakeyset`库弥补了这一空白,为SQLAlchemy的ORM和核心模式都提供了键集分页解决方案。 ### 键集分页概念 键集分页,又称“游标分页”,不同于传统的偏移量分页。在偏移量分页中,我们需要指定一个偏移量(即跳...

    sqlalchemy documentation sqlalchemy 文档

    - 通过映射器配置,可以在删除父对象时自动删除其关联的子对象。 - 示例代码: ```python from sqlalchemy import ForeignKey from sqlalchemy.orm import relationship class Address(Base): __tablename__ = ...

    学习使用SQLAlchemy框架,在ORM模式下实现Python与MySQL的连接、结构设计和增删查改.zip

    SQLAlchemy是Python中的一款强大的对象关系映射(ORM)库,它允许开发者使用Python类来定义数据库模型,然后在这些类上执行SQL操作,极大地简化了数据库编程。在这个"学习使用SQLAlchemy框架,在ORM模式下实现Python...

    Python-reobject一个Python对象的ORM层

    `reobject`是一个这样的ORM层,它专注于提供类似Django ORM的查询语法,让开发者在运行时能够方便地追踪和查询对象。 在Python开发中,ORM框架如SQLAlchemy、 Pony ORM和`reobject`等,都有助于简化数据库交互,...

    如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱

    在使用 SQLAlchemy 时,那些看似很小的选择可能对这种对象关系映射工具包的性能产生重要影响。 对象关系映射Object-relational mapping(ORM)使应用程序开发人员的工作更轻松,在很大程度是因为它允许你使用你可能...

    sqlalchemy对象转dict的示例

    代码如下:def sa_obj_to_dict(obj, filtrate=None, rename=None): “”” sqlalchemy 对象转为dict :param filtrate: 过滤的字段 :type filtrate: list or tuple :param rename: 需要改名的,改名在过滤之后处理...

    SQLAlchemy最新英文文档

    SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具,使用MIT许可证...SQLAlchemy首次发行于2006年2月,并迅速地在Python社区中最广泛使用的ORM工具之一,不亚于Django的ORM框架。

    sqlalchemy文档资料翻译

    - **组件间的依赖关系**:虽然SQL Expression Language可以独立于ORM使用,但在ORM中也包含了SQL Expression Language的部分接口,以便更好地支持面向对象的操作。 #### 二、教程与文档资源 - **Object Relational...

    SQLAlchemy技术文档(中文版)

    - **功能说明**:在使用SQLAlchemy之前,确保安装的版本符合项目需求是非常重要的。可以通过导入SQLAlchemy包并调用`__version__`属性来检查当前安装的SQLAlchemy版本。 ```python import sqlalchemy print...

    SQLAlchemy

    SQLAlchemy是一种流行的ORM(对象关系映射)工具,它在Python社区中被广泛使用,特别是在数据库操作和管理方面。ORM工具的主要目的是将数据库中的数据表结构映射到编程语言中的对象模型,允许开发者使用更加面向对象...

    SQLAlchemy 1.2.8

    SQLAlchemy是Python编程语言中的一款强大的SQL工具包和对象关系映射(ORM)框架,它为开发者提供了在Python中操作数据库的强大功能。SQLAlchemy 1.2.8是该库的一个稳定版本,提供了多种增强和改进,使得数据库交互...

    SqlAlchemy教程+学习文档

    SQLAlchemy的分发版包含了大量ORM相关的代码示例,还有在wiki上的其他示例,帮助开发者更好地理解和应用SQLAlchemy。 总结来说,SQLAlchemy是一个强大的数据库工具,结合了ORM和SQL表达式语言,提供了灵活且高效的...

    Essential SQLAlchemy 2nd Edition

    **SQLAlchemy**是Python编程语言中的一个流行对象关系映射(ORM)库,它为开发者提供了在Python中操作数据库的强大工具。ORM允许开发者使用面向对象的编程方式与数据库进行交互,而无需直接编写SQL语句,极大地提高了...

    sqlalchemy-utils, Sqlalchemy的各种实用程序函数和数据类型.zip

    Sqlalchemy-utils是一个强大的Python库,它是为SQLAlchemy这个流行的ORM(对象关系映射)框架提供额外功能和实用工具的扩展。SQLAlchemy是Python中的一个核心数据库接口,它允许开发者使用面向对象的方式来操作...

    sqlalchemy

    16. 配置删除操作:SQLAlchemy支持配置删除行为,如级联删除,这意味着删除一个对象时,相关的对象也会根据配置被删除。 17. 进一步参考:文档中还提供了进一步学习的资源,以帮助开发者更深入地理解和使用...

    Python SQLAlchemy入门教程(基本用法)

    SQLAlchemy是一个流行的对象关系映射(ORM)工具,它允许开发者通过Python语言的抽象而非直接使用SQL语句来管理数据库。本文将通过实例演示如何使用SQLAlchemy的基础功能,特别以MySQL数据库为例进行讲解。 描述...

    SQLAlchemy详细教程

    SQLAlchemy 是一个 Python 的关系型数据库工具包,提供了一个高级的对象关系映射(Object-Relational Mapping,ORM)系统,允许开发者使用 Python 对象来交互数据库,而不需要直接使用 SQL 语言。下面是 SQLAlchemy ...

Global site tag (gtag.js) - Google Analytics