返回两个SqlAlchemy列的连接结果

7 投票
2 回答
8867 浏览
提问于 2025-04-18 02:45

我正在使用 FlaskSQLAlchemy。我有一个 Person 模型,我想要一个属性,可以返回这个 Person 的全名(名 + 姓)。

我尝试使用 @declared_attr,但是输出结果是:

"person.first_name || :param_1 || person.last_name"

这是我的代码:

class Person(Base):
    __tablename__ = 'person'

    id = Column(Integer, primary_key = True)
    type = Column(String(50))
    first_name = Column(String(120), index = True)
    last_name = Column(String(120), index = True)

    @declared_attr
    def name(cls):
        "Returns Person's full name."
        return cls.first_name + ' ' + cls.last_name

2 个回答

9

@davidism 提出了使用混合扩展的建议,而我想说,为什么不试试 SQLAlchemy 的 column_property 函数呢?

举个例子:

class User(Base):
    __tablename__ = 'user'
    id = Column(Integer, primary_key=True)
    firstname = Column(String(50))
    lastname = Column(String(50))
    fullname = column_property(firstname + " " + lastname)
6

使用这个hybrid扩展:

from sqlalchemy.ext.hybrid import hybrid_property

class Person(Base):
    # ...
    @hybrid_property
    def name(self):
        return '{0} {1}'.format(self.first_name, self.last_name)

    @name.setter
    def name(self, value):
        self.first_name, self.last_name = value.split(' ', 1)

    @name.expression
    def name(cls):
        return db.func.concat(cls.first_name, ' ', cls.last_name)

撰写回答