2

我知道我可以从表中延迟加载列:

session.query(MyTable).options(defer(colname) 
      for colname in ['col4', 'col5', ..,  'colN'])

我只想要前 3 列,因此可以将其缩短为以下内容:

session.query(MyTable).options(defer(col.name) 
      for col.name in MyTable.__table__.columns
      if col.name not in ['col1', 'col2', 'col3'])

因为MyTable有一些column_property未在 中列出的额外 s,所以MyTable.__table__.columns即使我不想要它们,它们也会包含在查询中。

那么有没有一种结构可以直接表达我想要的限制?例如类似的东西

session.query(MyTable).options(XXselect('col1', 'col2', 'col3'))
4

2 回答 2

3

如果您只想要这些值,您可以调用:

session.query(Mytable.col1, MyTable.col2, MyTable.col3).

如果您想要具有延迟列的完整对象,MyTable.__table__.columns则应该为您提供所有列,而不管 mixins 是什么。

于 2012-07-09T16:42:55.230 回答
0

load_only()函数可用于此

可以选择任意一组列作为“仅加载”列,这些列将在延迟给定实体上的所有其他列的同时加载,使用 orm.load_only():

from sqlalchemy.orm import load_only

session.query(Book).options(load_only("summary", "excerpt"))
于 2017-11-15T20:16:14.803 回答