[英]SQLAlchemy Get Raw SQL Value from TypeDecorator
我為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表。 是否有可能做到這一點? 注意,由於EnumColumnType
正確地將行保留到表中,因此EnumColumnType
, Bar
和Foo
的定義正確。
我不是SQLAlchemy用戶,但是我可以說Enum
是提供唯一值的文本表示形式。
從您的描述中,我認為最好使用一個IntEnum
,它雖然仍具有Bar.foo
或Bar.baz
的文本表示形式, Bar.foo
仍可以直接用作int
1
或3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.