SQLAlchemy:在SQLAlchemy中向列执行/添加函数

1 投票
1 回答
2650 浏览
提问于 2025-04-18 11:14

我正在使用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

你可以做几件事情。

我随便想想...

  1. 如果你只是想显示一些内容,可以使用属性装饰器:

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

  1. 如果你想处理字符串,并让sqlalchemy自动把字符串和整数转换,你可以使用类型装饰器 -- http://docs.sqlalchemy.org/en/rel_0_9/core/types.html#custom-types

就我个人而言,我通常选择属性装饰器。

撰写回答