set-datatype-as-int-enum
问题
SQLAlchemy的类型可以设为Enum,默认使用key
1 | class MyEnum(Enum): |
设置Column("column_name", Enum(MyEnum))插入的是"one"、"two"等key字符串
官方提供了参数values_callable,但value必须是字符串
内部使用value的len属性构造object,而数值没有该属性
假设value为字符串’1’,’2’,’3’
1 | Column("column_name", Enum(MyEnum, values_callable=lambda x: [e.value for e in x])) |
解决办法
继承TypeDecorator创建自定义Enum列类型
1 | from sqlalchemy import Integer, TypeDecorator |
- 继承自
sqlalchemy.TypeDecorator - 设置impl为需要的类型,此处为Integer
- 重写
process_bind_param,返回value - 重写
process_result_value,返回Enum实例
使用方法
1 | Column("column_name", IntEnum(MyEnum)) |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 AlMirai!