从SQLAlchemy中的另一列创建列

时间:2014-09-12 20:22:02

标签: python sql sqlalchemy

我希望有一个SQLAlchemy Column,它将从另一列计算出来。例如,列month中的列{'Jan', ...}date)(例如2014-09-12),因此从技术上讲,它是09到{{1}的一次性解析}}

是否可以将其写入对象本身的类中?或者每次记录更新时都运行更新?

PS:仅举几个月。当派生列的空间是无限的时,我对一般情况感兴趣。

2 个答案:

答案 0 :(得分:4)

column_property可能会满足您的需求。这允许您创建看起来像普通映射对象列的东西,但是从其他列自动计算。

Example:

class User(Base):
    __tablename__ = 'user'
    id = Column(Integer, primary_key=True)

    # actual database columns
    firstname = Column(String(50))   
    lastname = Column(String(50))

    # calculated from the other two
    fullname = column_property(firstname + " " + lastname)   

在您的示例用法中:

class Foo(Base):
    date = Column(DateTime)
    month_only = column_property(date.strptime("%b")) # 'Jan','Feb',etc.

答案 1 :(得分:2)

使用数据库级触发器听起来像是对我来说最有效的解决方案。请阅读Triggered Columns,以便在ORM方面正确配置此类列。