如何修改SQLAlchemy ORM通用查询函数以支持多列查询返回
解决方案
修改逻辑
- 对传入的
col参数做拆分处理:如果不为空,先按逗号分割为单个字段名,去除每个字段名前后的空白字符,再批量从table.c中取出对应的列对象,组成列表传入select方法即可 - 保留原有调用逻辑的兼容性,单字段查询的写法不需要改动
修改后的核心代码
def __read(self, col: str = "", cond: str = ""): # 处理列参数 if col: # 拆分多字段,去除每个字段的前后空格 col_list = [c.strip() for c in col.split(",")] select_cols = [self.table.c[c] for c in col_list] else: # 空col默认查全表 select_cols = [self.table] # 构造查询语句 if cond: cmd = select(*select_cols).where(text(cond)) else: cmd = select(*select_cols) return self.conn.execute(cmd)
调用示例
原有单字段查询(完全兼容无需修改)
pgs = PostGreSQL(my_db, Users) age = pgs._PostGreSQL__read(col="age", cond="name = 'John Doe'").fetchone() # 如果你后续已将私有方法改名为单下划线的_read,直接沿用原来的调用方式即可
多字段查询
# 传入逗号分隔的多字段名即可正常查询 res = pgs._PostGreSQL__read(col="age, hobby", cond="name = 'John Doe'").fetchone() # 直接解构获取对应字段值 age, hobby = res
注:如果传入了不存在的字段名仍然会抛出KeyError,属于正常的参数合法性校验报错,可根据业务需求自行加异常捕获逻辑。
内容的提问来源于stack exchange,提问作者stev
相关产品推荐
相关产品推荐

