如何输出选定的列值

时间:2018-11-13 12:48:10

标签: python sqlalchemy

在单个模型Person中,有一个地址信息。但是由于我们还没有将其分开到另一个表中。我只想查询Person表中的地址信息。是否可以使用hybrid_property?如果不需要,我还需要什么?

我想避免这一点:

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'}

如何获得仅检索所需字段的输出?只要我得到所需的内容,就不需要是字典或元组。

1 个答案:

答案 0 :(得分:1)

如果要避免键入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