如何在Pony ORM中实现类似SELECT *的全字段查询?
解决Pony ORM全字段转换为字典的问题
你可以利用Pony ORM内置的to_dict()方法自动生成包含所有字段的字典,无需手动逐个编写。同时优化查询逻辑让代码更简洁高效:
修改后的代码
from typing import Union from pony.orm import db_session @db_session def get_client_info_by(self, **criteria) -> Union[dict, None]: """Return client's info from database by specified criteria""" if not criteria: return None # 简化过滤条件写法,直接用select传入关键字参数 query = self.clients.select(**criteria) # 获取第一个匹配的客户实体,无匹配则返回None client = query.first() if client: # 自动转换所有字段为字典 return client.to_dict() return None
关键优化说明
- 自动生成字段字典:
client.to_dict()会自动遍历实体的所有数据库字段生成键值对字典,彻底替代手动编写50+字段的冗余代码。如果需要排除部分字段,可使用client.to_dict(exclude=['field1', 'field2']);如果仅需特定字段,用include参数,比如client.to_dict(include=['id', 'first_name'])。 - 简化查询过滤:Pony的
select()方法支持直接传入关键字参数作为过滤条件,省去循环添加filter的步骤,代码更简洁。 - 高效获取单个对象:用
first()方法直接获取第一个匹配的实体,比切片query[:]再取索引更高效,返回结果要么是实体对象要么是None,判断逻辑更直观。
内容的提问来源于stack exchange,提问作者Tori
相关产品推荐
相关产品推荐

