You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改SQLAlchemy ORM通用查询函数以支持多列查询返回

解决方案

修改逻辑

  1. 对传入的col参数做拆分处理:如果不为空,先按逗号分割为单个字段名,去除每个字段名前后的空白字符,再批量从table.c中取出对应的列对象,组成列表传入select方法即可
  2. 保留原有调用逻辑的兼容性,单字段查询的写法不需要改动

修改后的核心代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 19:45:03