Как определить свойства Python Enum, если в именах MySQL ENUM есть пробел?

10

У меня есть Enumкласс Python, как это:

from enum import Enum
class Seniority(Enum):
    Intern = "Intern"
    Junior_Engineer = "Junior Engineer"
    Medior_Engineer = "Medior Engineer"
    Senior_Engineer = "Senior Engineer"

В базе данных MYSQL столбец старшинства ENUM имеет значения «Стажер», «Младший инженер», «Младший инженер», «Старший инженер».

Проблема в том, что я получаю ошибку:

LookupError: "Junior Engineer" is not among the defined enum values

Эта ошибка произошла, когда я вызываю запрос как:

UserProperty.query.filter_by(full_name='John Doe').first()

seniorityсвойство enum в UserPropertyмодели.

class UserProperty(db.Model):
   ...
   seniority = db.Column(db.Enum(Seniority), nullable=True)
   ...

Для этого класса я определил класс Schema, используя marshmallow Schemaи EnumFieldиз marshmallow_enumпакета:

class UserPropertySchema(Schema):
    ...
    seniority = EnumField(Seniority, by_value=True)
    ...

Что делать в этой ситуации, потому что я не могу определить имя свойства класса Python с пробелом. Как заставить Python использовать значения определенных свойств вместо имен свойств?

Матия Лукич
источник
2
посмотрим, поможет ли это notinventedhere.org/articles/python/…
Shenanigator

Ответы:

3

Как сказал Шенанигатор в комментарии к моему вопросу, мы можем использовать псевдонимы для решения этой проблемы.

Seniority = Enum(
    value='Seniority',
    names=[
        ('Intern', 'Intern'),

        ('Junior Engineer', 'Junior Engineer'),
        ('Junior_Engineer', 'Junior_Engineer'),

        ('Medior Engineer', 'Medior Engineer'),
        ('Medior_Engineer', 'Medior_Engineer'),

        ('Senior Engineer', 'Senior Engineer'),
        ('Senior_Engineer', 'Senior_Engineer')
    ]
)
Матия Лукич
источник
2

Список - это множество символических имен (отдельных лиц), связанных с одним из устойчивых качеств. Внутри спецификации на отдельных персонажей можно смотреть, а сам счет можно повторять.

Содержание модуля

Этот модуль характеризует четыре класса спецификации, которые можно использовать для характеристики замечательных расположений имен и качеств: Enum, IntEnum, Flag и IntFlag. Он также характеризует один декоратор, единственный в своем роде () и один помощник, auto.

Класс enum.Enum

Базовый класс для создания перечисленных констант. Смотрите сегмент Functional API для другой грамматики разработки.

Класс enum.IntEnum

Базовый класс для создания перечисленных констант, которые дополнительно являются подклассами int.

Класс enum.IntFlag

Базовый класс для создания перечисленных констант, которые могут быть объединены с использованием побитовых администраторов без потери участия в IntFlag. IntFlag особи дополнительно являются подклассами int.

Класс enum.Flag

Базовый класс для создания перечисленных констант, которые можно консолидировать, используя побитовые задачи, не теряя при этом их флаг регистрации.

enum.unique ()

Декоратор класса Enum, который гарантирует только одно имя, привязан к любой ценности.

класс enum.auto

Примеры заменяются подходящим стимулом для людей Enum. Начало стоит начала с 1.

Новое в варианте 3.6: Flag, IntFlag, a

чакри б
источник