mysql - sqlalchemy query中的all()方法,会一次性把所有数据弄到内存里??
天蓬老师
天蓬老师 2017-04-17 11:32:39
[MySQL讨论组]

documentation中说:
Return the results represented by this Query as a list.

返回实例列表,如果这个表很大很大,那么这个列表岂不是很占内存?

实际案例:
需要在user表中筛选符合条件的用户,然后随机返回一位。

不知道是直接用sqlalchemy的orm做,还是用sql语句做。新手,对mysql不是太懂

【感谢亲们的回答。不过我提问的重点在于query中的all()方法,获取的列表,到底是个什么概念。像 t = User.query.all(),会把所有user表的记录从数据库全都弄到本地?】

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(4)
高洛峰

先在 filter 层做过滤,再做 limit,这样会不会好些?而且你不是本来就是要先『筛选』吗?

ringa_lee

如果主键是一个自增字段的话,可以用一个全局变量来缓存最大的主键,然后每次查询就从1到这个最大值直接取随机数,用得到的随机数来作为主键查询条件。

天蓬老师

可以这样来说,不过要修改一下数据表,要增加一个float类型的rnd字段,并且建立索引,给rnd字段都存一个0~1的随机数进去,查询的时候可以自己产生一个随机数x,用一个rnd>x的.first()查询来找到记录,可以快很多

高洛峰

会的,你print查询结果就知道了。所以尽量加筛选条件。今天还发现,查询的时候不加all(),结果任然是可以用的,并且这样时间会大大缩减。我的user表只有1000条数据,下面的时间十多次的结果。感觉差别好大,打算在本地多造点数据测测。能不加all()就别加all()
0.01247529993282
0.00247529993282

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号