Saya memiliki kelas Python Enum seperti ini:

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

Dalam database MYSQL, kolom ENUM senioritas memiliki nilai "Magang", "Insinyur Junior", "Insinyur Menengah", "Insinyur Senior".

Masalahnya adalah saya mendapatkan kesalahan:

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

Kesalahan ini terjadi ketika saya memanggil kueri seperti:

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

seniority adalah properti enum dalam model UserProperty.

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

Untuk kelas ini saya telah mendefinisikan kelas Skema menggunakan marshmallow Schema dan EnumField dari paket marshmallow_enum:

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

Apa yang harus dilakukan dalam situasi ini, karena saya tidak dapat mendefinisikan nama properti kelas python dengan spasi. Bagaimana cara memaksa python untuk menggunakan nilai properti yang ditentukan alih-alih nama properti?

10
Matija Lukic 22 Januari 2020, 15:33

2 jawaban

Jawaban Terbaik

Seperti yang dinyatakan Shenanigator dalam komentar pertanyaan saya, kita dapat menggunakan alias untuk menyelesaikan masalah ini.

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')
    ]
)
3
Matija Lukic 24 Januari 2020, 16:01

Daftar adalah banyak nama simbol (individu) yang terikat pada satu jenis, kualitas tetap. Di dalam spesifikasi, individu dapat dilihat berdasarkan karakter, dan hitungan itu sendiri dapat diulang.

Isi Modul

Modul ini mencirikan empat kelas spesifikasi yang dapat digunakan untuk mengkarakterisasi pengaturan nama dan kualitas yang luar biasa: Enum, IntEnum, Flag, dan IntFlag. Ini juga mencirikan satu dekorator, satu dari jenis (), dan satu pembantu, otomatis.

Kelas enum.Enum

Kelas dasar untuk membuat konstanta terdaftar. Lihat segmen Functional API untuk tata bahasa pengembangan lainnya.

Kelas enum.IntEnum

Kelas dasar untuk membuat konstanta terdaftar yang merupakan subkelas tambahan dari int.

Kelas enum.IntFlag

Kelas dasar untuk membuat konstanta terdaftar yang dapat dikonsolidasikan menggunakan administrator bitwise tanpa kehilangan partisipasi IntFlag mereka. Individu IntFlag juga merupakan subkelas dari int.

Kelas enum.Bendera

Kelas dasar untuk membuat konstanta terdaftar yang dapat dikonsolidasikan menggunakan tugas bitwise tanpa kehilangan pendaftaran Bendera mereka.

Enum.unik()

Dekorator kelas Enum yang menjamin hanya satu nama yang terikat dengan nilai apa pun.

Kelas enum.auto

Contoh digantikan dengan insentif yang sesuai untuk individu Enum. Awal bernilai awal pada 1.

Baru dalam varian 3.6: Bendera, IntFlag, a

2
chakri b 30 Januari 2020, 10:14