如果 MySQL ENUM 值的名称中有空格,如何定义 Python Enum 属性?

Mat*_*kic 10 python mysql enums marshmallow

我有这样的 PythonEnum类:

from enum import Enum
class Seniority(Enum):
    Intern = "Intern"
    Junior_Engineer = "Junior Engineer"
    Medior_Engineer = "Medior Engineer"
    Senior_Engineer = "Senior Engineer"
Run Code Online (Sandbox Code Playgroud)

在MYSQL数据库中,资历ENUM列有值“实习生”、“初级工程师”、“中级工程师”、“高级工程师”。

问题是我收到一个错误:

LookupError: "Junior Engineer" is not among the defined enum values
Run Code Online (Sandbox Code Playgroud)

当我调用查询时发生此错误:

UserProperty.query.filter_by(full_name='John Doe').first()
Run Code Online (Sandbox Code Playgroud)

seniorityUserProperty模型中的枚举属性。

class UserProperty(db.Model):
   ...
   seniority = db.Column(db.Enum(Seniority), nullable=True)
   ...
Run Code Online (Sandbox Code Playgroud)

对于这个类,我使用marshmallow SchemaEnumField来自marshmallow_enum包定义了 Schema 类:

class UserPropertySchema(Schema):
    ...
    seniority = EnumField(Seniority, by_value=True)
    ...
Run Code Online (Sandbox Code Playgroud)

在这种情况下该怎么办,因为我无法定义带有空格的python类属性名称。如何强制python使用已定义属性的值而不是属性名称?

Mat*_*kic 3

正如 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')
    ]
)
Run Code Online (Sandbox Code Playgroud)