在单个模型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'}
如何获得仅检索所需字段的输出?只要我得到所需的内容,就不需要是字典或元组。
答案 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