gpt4 book ai didi

python - SQLAlchemy 从 TypeDecorator 获取原始 SQL 值

转载 作者:太空宇宙 更新时间:2023-11-03 16:54:56 25 4
gpt4 key购买 nike

我为 sqlalchemy 定义了以下自定义类型:

class EnumColumnType(TypeDecorator):
impl = Integer

def __init__(self, enum, *args, **kwargs):
self.enum = enum
super(EnumColumnType, self).__init__(*args, **kwargs)

def process_bind_param(self, value, dialect):
if value is None:
return None
return value.value

def process_result_value(self, value, dialect):
if value is None:
return None
return self.enum(value)

@property
def python_type(self):
return int

本质上,它封装了一个Python枚举并将其作为整数写回sql表。

假设我定义了以下枚举:

class Bar(Enum):
foo = 1
bar = 2
baz = 3

假设我有一个模型如下:

class Foo(base):
enum = Column(EnumColumnType(Bar))
id = Column(Integer, primary_key=True)

如果我有 Foo 的实例,即 row = Foo(enum=Bar.baz),我是否可以获取 row.enum 的 sql 类型?目前,row.enum 正确地计算为 Bar.baz,但我想得到 3,该值被写入 sql 表。是否有可能做到这一点?请注意,EnumColumnTypeBarFoo 已正确定义,因为 sqlalchemy 正确地将行保留到表中。

最佳答案

我不是 SQLAlchemy 用户,但我可以说 Enum 的要点是提供唯一值的文本表示。

根据您的描述,我认为 IntEnum 最好为您服务,同时仍然具有 Bar.fooBar.baz< 的文本表示形式 仍然可以直接用作 int 13

关于python - SQLAlchemy 从 TypeDecorator 获取原始 SQL 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35491490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com