SQLAlchemy迭代性能差

2024-05-14 18:14:15 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码块查询一个有~2000行的表。循环需要20秒才能执行!从我有限的知识来看,我不认为我在做2000个查询,只是一个,但也许我不了解“.”操作符和它在幕后做什么。如何修复此循环以更快地运行?有没有办法调整顶层查询的s.t.第二个for循环没有生成总共3000个查询(如果事实上是这样的话)?你知道吗

下面是我制作的一个测试代码块,用来验证实际上是这个内部循环导致了大量的时间消耗。你知道吗

block = []
cnt = 0
for blah in dbsession.query(mytable):
    tic = time.time()
    for a in blah.component:
        cnt += 1
    block.append(time.time()-tic)
print "block: %s seconds    cnt: %s" % (sum(block), cnt)

# block: 20.78191 seconds    cnt: 3021

使用所选最佳答案的建议,for循环变为:

for blah in dbsession.query(mytable).options( joinedload(mytable.componentA)).options(mytable.componentB)).options(mytable.componentC)

这导致每个组件的内环分别从20-25s变为0.25s、0.59 s和0.11s。查询本身现在需要大约18秒。。。所以我总共节省了55秒


Tags: 代码infortimemytableticqueryblock

热门问题