documentation中说:
Return the results represented by this Query as a list.
返回实例列表,如果这个表很大很大,那么这个列表岂不是很占内存?
实际案例:
需要在user表中筛选符合条件的用户,然后随机返回一位。
不知道是直接用sqlalchemy的orm做,还是用sql语句做。新手,对mysql不是太懂
【感谢亲们的回答。不过我提问的重点在于query中的all()方法,获取的列表,到底是个什么概念。像 t = User.query.all(),会把所有user表的记录从数据库全都弄到本地?】
先在 filter 层做过滤,再做 limit,这样会不会好些?而且你不是本来就是要先『筛选』吗?
如果主键是一个自增字段的话,可以用一个全局变量来缓存最大的主键,然后每次查询就从1到这个最大值直接取随机数,用得到的随机数来作为主键查询条件。
可以这样来说,不过要修改一下数据表,要增加一个float类型的rnd字段,并且建立索引,给rnd字段都存一个0~1的随机数进去,查询的时候可以自己产生一个随机数x,用一个rnd>x的.first()查询来找到记录,可以快很多
会的,你print查询结果就知道了。所以尽量加筛选条件。今天还发现,查询的时候不加all(),结果任然是可以用的,并且这样时间会大大缩减。我的user表只有1000条数据,下面的时间十多次的结果。感觉差别好大,打算在本地多造点数据测测。能不加all()就别加all()
0.01247529993282
0.00247529993282