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

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

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

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

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

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

天蓬老师
天蓬老师

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

répondre à tous (4)
小葫芦

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

    左手右手慢动作

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

      Peter_Zhu

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

        小葫芦

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

          Derniers téléchargements
          Plus>
          effets Web
          Code source du site Web
          Matériel du site Web
          Modèle frontal
          À propos de nous Clause de non-responsabilité Sitemap
          Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!