如何在声明式SQLAlchemy 2.0中使用方括号语法获取表列
SQLAlchemy 2.0声明式模型支持方括号语法访问列吗?
是的,SQLAlchemy 2.0里继承自DeclarativeBase的声明式模型类,完全支持用方括号语法Example['foo']访问表列,和点语法Example.foo的效果完全等价。
为什么可以这么用
DeclarativeBase的子类默认实现了__getitem__方法,允许通过字符串形式的列名获取对应的列属性。这个设计主要是为了应对点语法搞不定的场景,比如动态生成的列名、列名和Python关键字冲突等情况。
验证示例
先补全你代码里缺失的导入,然后测试方括号语法:
from sqlalchemy.orm import DeclarativeBase, mapped_column from sqlalchemy import select, Text class Example(DeclarativeBase): __tablename__ = 'example' foo = mapped_column(Text, nullable=False) # 用方括号语法构建查询 stmt = select(Example['foo']).select_from(Example) print(stmt) # 输出: SELECT example.foo FROM example
实用场景举例
当列名是动态生成的,或者列名和Python关键字冲突时,方括号语法会更方便:
class Example(DeclarativeBase): __tablename__ = 'example' # 列名是Python关键字class,用下划线规避后,方括号访问更直接 class_ = mapped_column(Text, nullable=False) # 用方括号访问该列 stmt = select(Example['class_']).select_from(Example)
如果尝试访问模型中不存在的列名,会直接抛出KeyError,和字典的行为一致。
内容的提问来源于stack exchange,提问作者Martin Reindl
相关产品推荐
相关产品推荐

