Python Sqlalchemy:高效查询和For循环

3
我正在尝试使用SQLalchemy从SQL数据库中查询大量数据。
some_data = db.session.query(some_info1, some_info2).all()

for key in some_data:
  # do something

这个 SQL 查询大约需要 10 秒钟,而 for 循环只需要大约 0.2 秒钟。

我也尝试了生成器的方式。

some_data = db.session.query(some_info1, some_info2)

generator = (x for x in attendee_profile)

for key in generator:
  # do something

这个 SQL 查询大约需要 0.04 秒,但 for 循环需要约 10 秒。

有没有更有效率的方法呢?我对使用生成器(generator)需要 10 秒的 for 循环表示怀疑,这么慢是正常的吗?

明确一下,我的目标是减少总耗时(不仅仅是查询时间或 for 循环时间)。


我认为您可以使用Memcache。 请参考此链接:http://bbit.co.nz/blog/2014/07/13/faster-sqlalchemy-memcached/ - Murali
1个回答

0

很遗憾,您的SQL查询在两种情况下都需要10秒钟。在第一个示例中,query(someinfo1, someinfo2).all()实际上正在执行查询。.all()强制执行查询。

在第二个示例中,query(someinfo1, someinfo2)并没有真正运行查询。它只是构造查询。当您开始迭代时,查询才会真正运行。

长话短说,专注于优化实际运行的SQL。使用EXPLAIN ANALYZE并考虑添加索引。问题不在这里的代码上,而是在SQL上。


是的,我又花了一整天的时间研究这个问题,但没有发现什么特别的。感谢您提供有关改进SQL的提示。 - seokhoonlee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接