代码之家  ›  专栏  ›  技术社区  ›  QA Collective

使用Peewee选择()数据的最快和最节省内存的方法?

  •  0
  • QA Collective  · 技术社区  · 7 年前

    Peewee的文档 iterating over lots of rows 目前介绍了两种可用的优化方法。

    第一 select.iterator() 选项似乎是内存优化。

    第二种选择是打电话 select dicts() , namedtuples() , objects() tuples() 是一个速度优化,因为它防止了peewee必须重建模型图。

    我的问题:

    • 这些方法是相互排斥的吗?打电话来好像是 () 例如,对于一个大的结果集,将返回一个巨大的字典数组,因此内存效率不高。
    • 如何将这两种优化组合在一起,以便以最小的内存快速迭代结果集?

    文档底部那个孤独的小代码示例是我的答案吗?

    for stat in stats.objects().iterator():
        serializer.serialize_object(stat)
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   coleifer    7 年前

    它们不是相互排斥的,可以结合在一起。文档中的示例显示了“objects()”(使用平面模型实例,如果要重建多个模型,则速度很快)和“iterator()”(有助于减少内存使用)。

    你也可以很容易地写下:

    for stat in stats.tuples().iterator():
        # whatever
    

    如果只想使用普通的旧数据库光标,可以编写:

    stats = Stat.select().etc()
    cursor = database.execute(stats)
    for row_tuple in cursor:
        # do whatever