SQLAlchemy:在SQLAlchemy中向列执行/添加函数
我正在使用SQLAlchemy,并且有一个查询,其中有一列的值是常量QUOT_STATUS_ERROR,这列的值是整数。由于这个常量值对最终用户没有意义,我想在查询中直接把这个值转换成字符串,方法是用一个字典来映射这列的值,而这个字典我在应用程序中已经有了,并且有一个函数可以用来实现这个映射。不过,我一直找不到实现这个的办法,因为查询中的列是对象,而不是列本身的值。为了让我的问题更清楚,这里有一个我正在使用的例子:
查询:
q = meta.session.query(MyModel.id, MyModel.quote_status).join(AnotherModel).subquery("q")
我想使用的函数:
def get_status_names(status_value):
return QUOTE_STATUS_NAMES[status_value]
有没有办法直接通过SQLAlchemy把一个函数(get_status_names())附加到列(MyModel.quote_status)上?如果没有,最好的方法是什么?我希望在获取结果后不要遍历这些值,特别是当结果列表很长的时候。我希望能得到一些正确的方向。
更新:我正在将结果子查询与其他表连接。
1 个回答
0
你可以做几件事情。
我随便想想...
- 如果你只是想显示一些内容,可以使用属性装饰器:
QUOTE_STATUS__ID_2_NAME = {}
class MyModel(object):
id = Column()
quote_status_id = Column()
@property
def quote_status_string(self):
if self.quote_status_id:
return QUOTE_STATUS__ID_2_NAME[self.quote_status_id]
return None
- 如果你想处理字符串,并让sqlalchemy自动把字符串和整数转换,你可以使用类型装饰器 -- http://docs.sqlalchemy.org/en/rel_0_9/core/types.html#custom-types
就我个人而言,我通常选择属性装饰器。