在SQLAlchemy中从另一列创建列

10 投票
2 回答
6848 浏览
提问于 2025-04-21 09:31

我想要在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.

撰写回答