다음 Enum
과 같은 Python 클래스 가 있습니다 .
from enum import Enum
class Seniority(Enum):
Intern = "Intern"
Junior_Engineer = "Junior Engineer"
Medior_Engineer = "Medior Engineer"
Senior_Engineer = "Senior Engineer"
MYSQL 데이터베이스에서 seniority ENUM 열의 값은 “Intern”, “Junior Engineer”, “Medior Engineer”, “Senior Engineer”입니다.
문제는 오류가 발생한다는 것입니다.
LookupError: "Junior Engineer" is not among the defined enum values
이 오류는 다음과 같은 쿼리를 호출 할 때 발생했습니다.
UserProperty.query.filter_by(full_name='John Doe').first()
seniority
UserProperty
모델의 열거 형 속성입니다 .
class UserProperty(db.Model):
...
seniority = db.Column(db.Enum(Seniority), nullable=True)
...
이 클래스를 위해 나는 사용하여 스키마 클래스를 정의한 marshmallow
Schema
과 EnumField
에서 marshmallow_enum
패키지 :
class UserPropertySchema(Schema):
...
seniority = EnumField(Seniority, by_value=True)
...
공백으로 파이썬 클래스 속성 이름을 정의 할 수 없기 때문에이 상황에서해야 할 일. 파이썬이 속성 이름 대신 정의 된 속성 값을 사용하도록 강제하는 방법은 무엇입니까?
답변
Shenanigator가 내 질문에 대한 의견에서 언급했듯이 별칭을 사용 하여이 문제를 해결할 수 있습니다.
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')
]
)
답변
목록은 친절하고 꾸준한 특성 중 하나에 묶인 상징적 인 이름 (개별)입니다. 사양 내에서 개인은 특성별로 볼 수 있으며 카운트 자체는 반복 될 수 있습니다.
모듈 내용
이 모듈은 Enum, IntEnum, Flag 및 IntFlag와 같이 이름과 특성의 현저한 배열을 특성화하는 데 사용할 수있는 네 가지 사양 클래스를 특징으로합니다. 마찬가지로 하나의 데코레이터, kind () 및 aide, auto를 특징으로합니다.
enum.Enum 클래스
나열된 상수를 만들기위한 기본 클래스입니다. 다른 개발 문법에 대해서는 기능 API 세그먼트를 참조하십시오.
enum.IntEnum 클래스
int의 추가 서브 클래스 인 나열된 상수를 만들기위한 기본 클래스입니다.
enum.IntFlag 클래스
IntFlag 참여를 잃지 않고 비트 단위 관리자를 사용하여 통합 할 수있는 나열된 상수를 만들기위한 기본 클래스입니다. IntFlag 개인은 추가적으로 int의 서브 클래스입니다.
클래스 enum.Flag
플래그 등록을 잃지 않고 비트 단위 작업을 사용하여 통합 할 수있는 나열된 상수를 만들기위한 기본 클래스입니다.
enum.unique ()
하나의 이름 만 보장하는 Enum 클래스 데코레이터는 어떤 가치에도 구속됩니다.
enum.auto 클래스
예는 Enum 개인에게 적합한 인센티브로 대체됩니다. 1부터 시작하는 가치가있는 시작.
변형 3.6의 새로운 기능 : Flag, IntFlag,