SQLAlchemy:执行/添加函数到sqlalchemy中的列

时间:2014-06-26 18:18:08

标签: python postgresql sqlalchemy

我使用SQLAlchemy并且我有一个查询,我从中获取的一个列是常量QUOTE_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]

通过将函数(get_status_names())附加/传递给列(MyModel.quote_status),是否可以直接从SQLAlchemy获取此方法。如果不是什么可能是最好的方法?一旦得到结果以防结果列表很广泛,我宁愿不迭代值。我希望能朝着正确的方向前进。

更新:我将结果子查询与其他表一起加入

1 个答案:

答案 0 :(得分:0)

你可以做一些事情。

脱离我的头顶......

  1. 如果您只想展示东西,可以使用属性装饰器:

  2. 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. 如果要渲染/接受字符串并透明地从字符串/ int转换sqlalchemy,可以使用TypeDecorator - http://docs.sqlalchemy.org/en/rel_0_9/core/types.html#custom-types
    2. 就个人而言,我通常会选择物业装饰。