<p>您可以查询各个列,这些列返回的命名元组实际上与映射对象的行为非常相似,如果您只是传递到模板或其他内容:</p>
<p><a href="http://www.sqlalchemy.org/docs/orm/tutorial.html#querying" rel="noreferrer">http://www.sqlalchemy.org/docs/orm/tutorial.html#querying</a></p>
<p>或者,您可以在映射类上以配置方式或使用选项将各种列建立为“deferred”:</p>
<p><a href="http://docs.sqlalchemy.org/en/latest/orm/loading_columns.html#deferred-column-loading" rel="noreferrer">http://docs.sqlalchemy.org/en/latest/orm/loading_columns.html#deferred-column-loading</a></p>
<p>trac中有一个称为“defer_everything_but()”的旧票证,如果有人想提供测试,并且没有理由不添加功能,这里有一个快速版本:</p>
<pre><code>from sqlalchemy.orm import class_mapper, defer
def defer_everything_but(entity, cols):
m = class_mapper(entity)
return [defer(k) for k in
set(p.key for p
in m.iterate_properties
if hasattr(p, 'columns')).difference(cols)]
s = Session()
print s.query(A).options(*defer_everything_but(A, ["q", "p"]))
</code></pre>
<p>defer()应该真的接受倍数,为此添加了ticket#2250(编辑:如注释中所述,这是0.9中的<a href="http://docs.sqlalchemy.org/en/latest/orm/mapper_config.html#sqlalchemy.orm.load_only" rel="noreferrer">load_only()</a>)</p>