Làm cách nào để xác định các thuộc tính Python Enum nếu các giá trị MySQL ENUM có khoảng trắng trong tên của chúng?


10

Tôi có Enumlớp Python như thế này:

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

Trong cơ sở dữ liệu MYSQL, cột ENUM thâm niên có các giá trị "Thực tập sinh", "Kỹ sư trẻ", "Kỹ sư trung gian", "Kỹ sư cao cấp".

Vấn đề là tôi gặp lỗi:

LookupError: "Junior Engineer" is not among the defined enum values

Lỗi này đã xảy ra khi tôi gọi truy vấn như:

UserProperty.query.filter_by(full_name='John Doe').first()

senioritylà tài sản enum trong UserPropertymô hình.

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

Đối với lớp này, tôi đã xác định lớp Schema bằng cách sử dụng marshmallow SchemaEnumFieldtừ marshmallow_enumgói:

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

Phải làm gì trong tình huống này, vì tôi không thể định nghĩa tên thuộc tính của lớp python có khoảng trắng. Làm thế nào để buộc python sử dụng các giá trị của các thuộc tính được xác định thay vì tên thuộc tính?


Câu trả lời:


3

Như Shenanigator đã nêu trong nhận xét về câu hỏi của tôi, chúng ta có thể sử dụng bí danh để giải quyết vấn đề này.

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

Một danh sách là rất nhiều tên biểu tượng (cá nhân) ràng buộc với một trong những loại phẩm chất ổn định. Trong một đặc điểm kỹ thuật, các cá nhân có thể được xem xét theo ký tự và số đếm có thể được lặp đi lặp lại.

Nội dung mô-đun

Mô-đun này đặc trưng cho bốn lớp đặc tả có thể được sử dụng để mô tả sự sắp xếp đáng chú ý của tên và phẩm chất: Enum, IntEnum, Flag và IntFlag. Nó cũng đặc trưng cho một người trang trí, một trong những loại () và một phụ tá, tự động.

lớp enum.Enum

Lớp cơ sở để tạo các hằng số được liệt kê. Xem phân đoạn API chức năng cho một ngữ pháp phát triển khác.

lớp enum.IntEnum

Lớp cơ sở để tạo các hằng được liệt kê là các lớp con bổ sung của int.

lớp enum.IntFlag

Lớp cơ sở để tạo các hằng số được liệt kê có thể được hợp nhất bằng cách sử dụng các quản trị viên bitwise mà không mất sự tham gia IntFlag của họ. Các cá nhân IntFlag là các lớp con bổ sung của int.

lớp enum.Flag

Lớp cơ sở để tạo các hằng số được liệt kê có thể được hợp nhất bằng cách sử dụng các tác vụ bitwise mà không mất đăng ký Flag.

enum.unique ()

Trình trang trí lớp Enum đảm bảo chỉ một tên được ràng buộc với bất kỳ giá trị nào.

lớp enum.auto

Các ví dụ được thay thế bằng một khuyến khích phù hợp cho các cá nhân Enum. Bắt đầu giá trị bắt đầu từ 1.

Mới trong biến thể 3.6: Flag, IntFlag, a

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.