簡體   English   中英

SQLAlchemy從TypeDecorator獲取原始SQL值

[英]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正確地將行保留到表中,因此EnumColumnTypeBarFoo的定義正確。

我不是SQLAlchemy用戶,但是我可以說Enum是提供唯一值的文本表示形式。

從您的描述中,我認為最好使用一個IntEnum ,它雖然仍具有Bar.fooBar.baz的文本表示形式, Bar.foo仍可以直接用作int 13

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM