【问题标题】:Return two SqlAlchemy Columns concatenated返回连接的两个 SqlAlchemy 列
【发布时间】:2019-03-06 23:50:32
【问题描述】:

我正在使用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

【问题讨论】:

    标签: python sqlalchemy flask-sqlalchemy


    【解决方案1】:

    @davidism 建议使用混合扩展,而我说,为什么不使用 SQLAlchemy 的 column_property function

    例子:

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

    【讨论】:

    • 是的,这似乎最适用,他们甚至将其用作文档中如何使用它的示例!干杯
    • 为我工作!!
    【解决方案2】:

    使用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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-26
      • 1970-01-01
      • 1970-01-01
      • 2018-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多