I am trying to use the sqlalchemy enum type without creating a native DB ENUM column but still having sqlalchemy validates enum inputs.
So I have this declaration :
from sqlalchemy import Column
from sqlalchemy import Integer
from sqlalchemy import Enum as SaEnum
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import validates
import enum
Base = declarative_base()
class DummyEnum(enum.Enum):
NAME_1 = "NAME_1"
NAME_2 = "NAME_2"
class SAEnumVarcharTable(Base):
__tablename__ = "test_table"
id = Column(Integer, primary_key=True)
uut_column = Column(SaEnum(DummyEnum, native_enum=False, validate_strings=True), default=DummyEnum.NAME_1)
@validates('uut_column')
def validate_uut_column(self, key, uut_value):
return uut_value.upper()
I want the validation returning the string in upper case and only then do the Enum validation... Is it possible?
because when I do :
connection.execute(insert(SAEnumVarcharTable), {"uut_column" : "name_1"})
it does raise a LookupError where I would expect to be accepted as valid input (first goes to the validates functions -> return an uppercase string -> do the Enum validation)...Is it somehow possible?