返回两个SqlAlchemy列的连接结果
我正在使用 Flask
和 SQLAlchemy
。我有一个 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)