是否可以控制在SQLAlchemy的查询方法中查询哪些列,同时仍然返回正在查询的对象的实例(尽管部分填充)?
或者SQLAlchemy需要执行SELECT *
来映射到对象吗?
(我知道查询单个列是可用的,但它不会将结果映射到对象,只映射到命名元组的组件)。
例如,如果用户对象具有userid、name、password和bio属性,但您希望查询只填写它返回的对象的userid和name:
# hypothetical syntax, of course:
for u in session.query(User.columns[userid, name]).all():
print u
将打印:
<User(1, 'bob', None, None)>
<User(2, 'joe', None, None)>
...
这可能吗?如果可能,怎么可能?
最新的
load_only
文档在这里http://docs.sqlalchemy.org/en/latest/orm/loading_columns.html#load-only-cols
如果要在模型定义级别控制它,请使用
deferred
http://docs.sqlalchemy.org/en/latest/orm/loading_columns.html#deferred
您可以查询各个列,这些列返回的命名元组实际上与映射对象的行为非常相似,如果您只是传递到模板或其他内容:
http://www.sqlalchemy.org/docs/orm/tutorial.html#querying
或者,您可以在映射类上以配置方式或使用选项将各种列建立为“deferred”:
http://docs.sqlalchemy.org/en/latest/orm/loading_columns.html#deferred-column-loading
trac中有一个称为“defer_everything_but()”的旧票证,如果有人想提供测试,并且没有理由不添加功能,这里有一个快速版本:
defer()应该真的接受倍数,为此添加了ticket#2250(编辑:如注释中所述,这是0.9中的load_only())
一个对我有效的简单解决方案是:
将打印:
相关问题 更多 >
编程相关推荐