sqlalchemy @property用于收集结果

时间:2018-06-01 15:20:12

标签: python sqlalchemy flask-sqlalchemy

假设我有一个像这样的简单模型:

class Example(db.Model):
__tablename__ = 'example'

ex_seq = db.Sequence('ex_seq', metadata=db.Model.metadata)
ex_id = db.Column(db.BIGINT(), server_default=ex_seq.next_value(), primary_key=True)
_thing1 = db.Column(db.VARCHAR(255), nullable=False)

@property
def thing1(self) -> list:
    """
    Mutator for thing1 to be represented as an array.
    Returns:
        list: The thing1 list.
    """
    return self._thing1.split('|')

@thing1.setter
def thing1(self, value):
    """
    Setter for thing1 to mutate an array into string.
    Args:
        value (list): The thing1 list.
    """
    self._thing1 = "|".join(value)

thing1 = synonym('_thing1', descriptor=thing1)

以下查询将按预期生成数组:

examples = db.session.query(Example).all()
for example in examples:
    print(example.thing1)

那是因为我操作的是示例类型。

但是,如果我想得到所有不同的东西1,我现在正在使用sqlalchemy.util._collections.result。

things = db.session.query(Example.thing1).distinct()
for thing in things:
    print(thing.thing1)

因此上面的代码将打印出我的管道分隔列表,而不通过db.Model'示例中定义的getter函数。'我已经在SQLAlchemy文档中进行了一些挖掘,但是这个用例似乎经常不足以引出结果。我也理解我使用postgres并且可以切换到阵列类型,但它是遗留系统,此时不适合升级。关于如何在模型中强制@property声明来处理集合结果的任何想法?

0 个答案:

没有答案
相关问题