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)
seniority是UserProperty模型中的枚举属性。
class UserProperty(db.Model):
...
seniority = db.Column(db.Enum(Seniority), nullable=True)
...
Run Code Online (Sandbox Code Playgroud)
对于这个类,我使用marshmallow Schema和EnumField来自marshmallow_enum包定义了 Schema 类:
class UserPropertySchema(Schema):
...
seniority = EnumField(Seniority, by_value=True)
...
Run Code Online (Sandbox Code Playgroud)
在这种情况下该怎么办,因为我无法定义带有空格的python类属性名称。如何强制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')
]
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
556 次 |
| 最近记录: |