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


10

我有这样的Python Enum类:

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()

seniorityUserProperty模型中的枚举属性。

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

对于这个类,我用定义的架构类marshmallow SchemaEnumFieldmarshmallow_enum包:

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

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


Answers:


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

2

列表是许多象征性的名称(个人),它们与一种稳定的品质相关联。在规范内,可以按字符查看个人,并且可以对计数本身进行迭代。

模块内容

该模块描述了四个规范类,可用于表征显着的名称和质量排列:Enum,IntEnum,Flag和IntFlag。它同样表征了一个装饰器,一个kind()和一个助手(自动)。

枚举类

用于制作列出的常量的基类。有关其他开发语法,请参见功能块API。

类enum.IntEnum

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

类enum.IntFlag

用于制作列出的常量的基类,可以使用按位管理员对其进行合并,而不会失去其IntFlag的参与。IntFlag个人另外是int的子类。

类枚举

用于制作列出的常数的基类,这些常数可以利用按位任务进行合并而不会丢失其Flag注册。

enum.unique()

保证仅一个名称绑定到任何一个值的Enum类修饰器。

enum.auto类

实例已被枚举个体的适当激励所取代。值得一开始的起点。

3.6版的新功能:Flag,IntFlag,

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.