จะกำหนดคุณสมบัติ Python Enum ได้อย่างไรหากค่า MySQL ENUM มีช่องว่างในชื่อ


10

ฉันมีEnumคลาสPython ดังนี้:

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

ในฐานข้อมูล MYSQL คอลัมน์ ENUM อาวุโสมีค่า "ฝึกงาน", "วิศวกรจูเนียร์", "วิศวกร Medior", "วิศวกรอาวุโส"

ปัญหาคือฉันได้รับข้อผิดพลาด:

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

ข้อผิดพลาดนี้เกิดขึ้นเมื่อฉันเรียกใช้แบบสอบถามเช่น:

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

seniorityเป็นคุณสมบัติ enum ในUserPropertyรูปแบบ

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

สำหรับคลาสนี้ฉันได้กำหนดคลาส Schema โดยใช้marshmallow SchemaและEnumFieldจากmarshmallow_enumแพ็คเกจ:

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

สิ่งที่ต้องทำในสถานการณ์นี้เพราะฉันไม่สามารถกำหนดชื่อคุณสมบัติคลาสหลามด้วยช่องว่างได้ จะบังคับให้ python ใช้ค่าของคุณสมบัติที่กำหนดแทนชื่อคุณสมบัติได้อย่างไร


2
ดูว่าสิ่งนี้ช่วยnotinventedhere.org/articles/python/ หรือไม่
Shenanigator

คำตอบ:


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 มันก็มีลักษณะของมัณฑนากรหนึ่งประเภท () และหนึ่งเสนาธิการอัตโนมัติ

ชั้นเรียน Enum

คลาสฐานสำหรับการทำให้ค่าคงที่แสดงรายการ ดูเซ็กเมนต์ Functional API สำหรับไวยากรณ์การพัฒนาอื่น ๆ

คลาส enum.IntEnum

คลาสฐานสำหรับการทำให้ค่าคงที่แสดงรายการซึ่งเป็นคลาสย่อยเพิ่มเติมของ int

ชั้น enum.IntFlag

คลาสพื้นฐานสำหรับการทำให้ค่าคงที่อยู่ในรายการที่สามารถรวมใช้ประโยชน์จากผู้ดูแลระบบระดับบิตโดยไม่สูญเสียการมีส่วนร่วมของ IntFlag บุคคล IntFlag เป็น subclasses เพิ่มเติมของ int

ชั้น enum.Flag

คลาสพื้นฐานสำหรับการสร้างค่าคงที่ในรายการที่สามารถรวมใช้ประโยชน์จากงาน bitwise โดยไม่สูญเสียการลงทะเบียนสถานะ

enum.unique ()

ผู้ประดับประดาชั้น Enum ที่รับประกันชื่อเพียงหนึ่งชื่อเท่านั้นที่ผูกพันกับค่าใด ๆ

คลาส enum.auto

ตัวอย่างจะถูกแทนที่ด้วยสิ่งจูงใจที่เหมาะสมสำหรับบุคคล Enum มูลค่าเริ่มต้นที่ 1

ใหม่ในชุด 3.6: ตั้งค่าสถานะ, IntFlag, a

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.