python - 如何输出选定的列值
问题描述
在单个模型Person
中存在地址信息。但是由于我们还没有将其分离到另一个表中。我只想从Person
表中查询地址信息。是否可以使用hybrid_property
If 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'}
如何实现仅检索所需字段的输出?只要我得到需要的东西,它就不需要是字典或元组。
解决方案
如果您想避免键入,只需在 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
推荐阅读
- robotframework - 使用robot.run时不能使用字典来设置元数据?
- javascript - 制作徽标的“条纹/客户”动画
- angular - Angular:无法绑定到“ngModelOptions”,因为它不是“输入”的已知属性
- java - 无法从 Maven 运行 testNG 测试
- react-native - React Native 驾照扫描仪
- php - 更改 Woocommerce 简码上的产品元查询
- node.js - 使用Angular 6在节点服务器中创建和上传文本文件
- android - 更改自定义键盘的布局
- javascript - 如何在 JavaScript 和 PHP 中迭代对象
- go - 在golang中将时间戳转换为ISO格式