如果 MySQL 枚举值的名称中包含 space,如何定义 Python 枚举属性?

How to define Python Enum properties if MySQL ENUM values have space in their names?

我有 Python Enum class 这样的:

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

在 MYSQL 数据库中,资历 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()

seniorityUserProperty 模型中的枚举 属性。

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

为此 class 我使用 marshmallow Schemamarshmallow_enum 包中的 EnumField 定义了架构 class:

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

遇到这种情况怎么办,因为我无法用space定义pythonclass属性名称。如何强制 python 使用已定义属性的值而不是 属性 名称?

正如 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')
    ]
)

一个列表是许多象征性的名字(个人)绑定到一种稳定的品质。在规范中,可以按字符查看个体,并且可以迭代计数本身。

模块内容

此模块描述了四个规范 classes,可用于描述名称和属性的显着排列:Enum、IntEnum、Flag 和 IntFlag。它还具有一个装饰器,一个 kind() 和一个助手,auto。

class enum.Enum

Base class 用于制作列出的常量。参见 segment Functional API 了解其他开发语法。

class enum.IntEnum

Base class 用于制作列出的常量,这些常量另外是 int 的子class。

class enum.IntFlag

Base class 用于制作列出的常量,这些常量可以利用按位管理员进行整合,而不会失去他们的 IntFlag 参与。 IntFlag 个体也是 int 的子class。

class enum.Flag

Base class 用于制作列出的常量,这些常量可以利用按位任务进行整合而不会丢失其 Flag 注册。

enum.unique()

Enum class 保证只有一个名字绑定到任何一个值的装饰器。

class enum.auto

示例被替换为适合 Enum 个人的激励措施。起始值从 1 开始。

变体 3.6 中的新增功能:Flag、IntFlag、a