添加列进行查询,返回SQLAlchemy中的映射类内部

时间:2014-05-08 22:00:29

标签: python sqlalchemy flask-sqlalchemy

这很简单。这是有意的:

>>> db.session.query(SomeModel).all()[0]
SomeModel(41330029-f21e-4022-aed5-e45e61ada399

但是如果我尝试添加另一个列,我会得到一个元组:

>>> db.session.query(SomeModel, some_expression.label('foo')).all()[0]
(SomeModel(41330029-f21e-4022-aed5-e45e61ada399), None)

如何得到平坦的结果?也就是说,SomeModel内部有foo属性,而不是兄弟姐妹?

1 个答案:

答案 0 :(得分:2)

对于简单表达式,我会将column_property添加到SomeModel,在这种情况下,它始终是其实例的属性。
或者,你可以看看Hybrid Attributes做同样的工作。

如果您有时只需要这个,那么只需在查询执行后将其设置为属性:

results = db.session.query(SomeModel, some_expression.label('foo')).all()
for mod, att in results:
    mod.foo = att # or: setattr(mod, "foo", att)
results = [mod for mod, _attr in results]