首页 > 解决方案 > 如何输出选定的列值

问题描述

在单个模型Person中存在地址信息。但是由于我们还没有将其分离到另一个表中。我只想从Person表中查询地址信息。是否可以使用hybrid_propertyIf not 我还需要什么来实现这些东西?

我想避免这个:

db.session.query(Person.id, Person.address_secret_id, Person.address_name).get(pk)

该模型

class Person(db.Model):
    # some lengthy information

    # address
    address_secret_id = db.Column(db.Unicode, nullable=True)
    address_name = db.Column(db.Unicode, nullable=True)

    @hybrid_property
    def address(self):
       # I never tested this but i know this is wrong.
       return self.id + self.address_secret_id + self.address_name

用法:

db.session.query(Person.address).get(pk)

预期输出:

{id: 1, address_secret_id: xxxx, address_name: 'forgetmeland'}

如何实现仅检索所需字段的输出?只要我得到需要的东西,它就不需要是字典或元组。

标签: pythonsqlalchemy

解决方案


如果您想避免键入,只需在 person 模型上db.session.query(Person.id, Person.address_secret_id, Person.address_name)添加一个属性。address_details

class Person(db.Model):
    # some lengthy information

    # address
    address_secret_id = db.Column(db.Unicode, nullable=True)
    address_name = db.Column(db.Unicode, nullable=True)

    @property
    def address_details(self):
        keys = ('id', 'address_secret_id', 'address_name')
        return {k: getattr(self, k) for k in in keys}

可能比尝试使用某种混合查询更少的代码行,并且仍然只是一次访问数据库。

查询将是:

Person.query.get(1).address_details


推荐阅读