Python Sqlalchemy:高效查询和For循环

时间:2016-05-10 04:11:53

标签: python mysql sqlalchemy

我正在尝试使用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秒。

有没有办法更有效地做到这一点?我特别怀疑使用发电机的循环10秒钟,我的意思是,使用发电机这么慢?

为了清楚起见,我的目标是减少所花费的总时间(不是查询时间,也不是for循环时间)。

1 个答案:

答案 0 :(得分:0)

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

在第二个示例中,query(someinfo1, someinfo2)实际上并不运行查询。它只构造查询。当您开始迭代时,就是实际运行查询的时间。

长话短说,专注于优化正在运行的实际SQL。使用EXPLAIN ANALYZE并查看添加索引。问题不在于此处的代码。它与SQL有关。