我希望有一个SQLAlchemy Column
,它将从另一列计算出来。例如,列month
中的列{'Jan', ...}
(date
)(例如2014-09-12
),因此从技术上讲,它是09
到{{1}的一次性解析}}
是否可以将其写入对象本身的类中?或者每次记录更新时都运行更新?
PS:仅举几个月。当派生列的空间是无限的时,我对一般情况感兴趣。
答案 0 :(得分:4)
column_property
可能会满足您的需求。这允许您创建看起来像普通映射对象列的东西,但是从其他列自动计算。
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
方面正确配置此类列。