在SQLAlchemy中从另一列创建列
我想要在SQLAlchemy中创建一个Column
,这个列的值是根据另一个列计算出来的。比如说,我有一个date
列(像2014-09-12
),我想从中提取出month
列(比如{'Jan', ...}
),也就是说,我只需要把09
转换成Sep
。
这样做可以直接写在对象的类里面吗?还是说每次记录更新的时候都要手动去更新?
补充说明:这里用月份只是举个例子。我其实想知道的是在一般情况下,如何处理这种派生列的情况。
2 个回答
4
在我看来,使用数据库级别的触发器听起来是最有效的解决方案。可以阅读触发列
,了解如何在ORM
这边正确配置这些列。
8
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.