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

如何在声明式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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 12:12:18