如何在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
相关产品推荐
相关产品推荐

