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

如何在SQLModel中高效选取多列(避免重复表名)

在SQLModel中实现无重复表名的多列查询方案

方案1:利用模型的__table__属性直接选取列

SQLModel的模型类底层关联了SQLAlchemy的Table对象,可以通过__table__.c访问列集合,用法和原生SQLAlchemy一致:

from sqlmodel import select

query = select(Product.__table__.c['id', 'weight'], Line.__table__.c['name']).join(Line)

这个方式直接复用SQLAlchemy的列选择逻辑,无需重复书写表名前缀,适合习惯原生SQLAlchemy写法的场景。

方案2:自定义辅助函数批量提取列

封装一个简单的工具函数,批量获取指定模型的列对象,既符合DRY原则,又提升代码可读性:

from sqlmodel import SQLModel, select

def select_cols(model: type[SQLModel], *column_names: str):
    return [getattr(model, col) for col in column_names]

# 调用示例
query = select(
    *select_cols(Product, 'id', 'weight'),
    *select_cols(Line, 'name')
).join(Line)

这个函数把列表推导式的逻辑封装起来,调用时语义清晰,复杂查询中多次使用时能大幅减少重复代码。

方案3:使用短别名简化引用

用短别名替代完整表名,能在保持可读性的同时减少重复书写:

from sqlmodel import select, aliased

p = aliased(Product)
l = aliased(Line)
query = select(p.id, p.weight, l.name).join(l, p.line_id == l.id)

短别名(如p代替Product)不仅缩短了代码长度,在多表关联、子查询等复杂场景下,还能让逻辑更清晰。

内容的提问来源于stack exchange,提问作者eldrly

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 13:07:11