如何在SQLAlchemy的Enum列中动态获取Python枚举类?
获取SQLAlchemy模型Enum列对应的Python枚举类
你可以通过访问SQLAlchemy列对象的type属性,再读取其enum_class属性,直接拿到对应的Python Enum类。
针对你的代码示例的实现
# 方式1:通过模型类属性获取列 column = MyModel.cool_enum_val # 方式2:通过表结构获取列 column = MyModel.__table__.columns.cool_enum_val # 获取对应的枚举类 target_enum = column.type.enum_class # 验证结果 print(target_enum.A) # 输出: MyCoolEnum.A print(list(target_enum)) # 输出: [<MyCoolEnum.A: 'A'>, <MyCoolEnum.B: 'B'>, <MyCoolEnum.C: 'C'>]
批量获取模型中所有Enum列的枚举类
如果需要一次性提取模型里所有Enum列对应的枚举类,可以用SQLAlchemy的inspect工具遍历列:
from sqlalchemy import inspect def extract_enum_classes(model): enum_map = {} inspector = inspect(model) for col in inspector.columns: if isinstance(col.type, sqlalchemy.Enum): enum_map[col.name] = col.type.enum_class return enum_map # 使用示例 model_enums = extract_enum_classes(MyModel) print(model_enums["cool_enum_val"]) # 输出: <enum 'MyCoolEnum'>
内容的提问来源于stack exchange,提问作者Avishay Matayev
相关产品推荐
相关产品推荐

