sqlalchemy query中的all()方法,会一次性把所有数据弄到内存里??


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

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

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

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

sqlalchemy mysql

RGM-89S 11 years, 1 month ago

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

比利的三角裤 answered 11 years, 1 month ago

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

那一缕阳光很美 answered 11 years, 1 month ago

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

后宫渚杏智代 answered 11 years, 1 month ago

Your Answer