Как правильно описывать enum в sqlalchemy?
Создал свое поле ENUM как в документации по значениям из строк в БД ('one / 1', 'two / 2')
import enum
from sqlalchemy.orm import DeclarativeBase
from sqlalchemy import Column, String, Boolean, BigInteger, Enum
class MyEnum(enum.Enum):
one = 'one / 1'
two = 'two / 2'
class Test(DeclarativeBase):
__tablename__ = 'test'
id = Column(BigInteger, unique=True, primary_key=True)
name = Column(String(100), nullable=False)
value = Column(Enum(MyEnum))
Но при выборе всех данных из таблицы данных
sql = select(Test).where(Test.name == 'имя_со_всеми_enum')
engine = create_engine('mysql://MYroot:[email protected]:3307/My_bd', echo=True)
with engine.connect() as conn:
print(pd.read_sql(sql, conn))
выдает ошибку:
LookupError: 'one / 1' is not among the defined enum values. Enum name: enumuseragent. Possible values: one , two
Есть предположение, что неправильно описал класс MyEnum, если так, то в чем просчитался?
Ответы (1 шт):
Автор решения: Алексей
→ Ссылка
Во-общем, если кто столкнется вот решение:
class Test(DeclarativeBase):
__tablename__ = 'test'
id = Column(BigInteger, unique=True, primary_key=True)
name = Column(String(100), nullable=False)
value = Column(Enum(MyEnum).values_callable)