以不同方式查询列的速度(SQLAlchemy)

时间:2016-04-13 12:21:53

标签: python sqlalchemy

这真的很快:

tgt_ids = [x.id for x in DBSession.query(getattr(cls, 'id')).all()]

这真的很慢:

tgt_ids = [x.id for x in DBSession.query(cls).options(load_only('id')).all()]

我观察到两者之间的SQL类似并且执行得非常快,但在后一种情况下,Python会导致30秒的高CPU负载。

为什么呢?

cls是以声明方式定义的典型用户SQA类)

1 个答案:

答案 0 :(得分:0)

可能是

的事实
tgt_ids = [x.id for x in DBSession.query(getattr(cls, 'id')).all()]

生成包含(<type of your id column>,)的结果元组(结果元组被标记,这就是x.id有效的原因),但是

tgt_ids = [x.id for x in DBSession.query(cls).options(load_only('id')).all()]

构造完整的模型对象,但仅填充id属性。