Saya memiliki Enum
kelas Python 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 "Intern", "Junior Engineer", "Medior Engineer", "Senior Engineer".
Masalahnya adalah saya mendapatkan kesalahan:
LookupError: "Junior Engineer" is not among the defined enum values
Kesalahan ini terjadi ketika saya memanggil permintaan seperti:
UserProperty.query.filter_by(full_name='John Doe').first()
seniority
adalah properti enum dalam UserProperty
model.
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 marshmallow_enum
paket:
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?
python
mysql
enums
marshmallow
Matija Lukic
sumber
sumber
Jawaban:
Seperti yang dinyatakan oleh Shenanigator dalam komentar pertanyaan saya, kita dapat menggunakan alias untuk menyelesaikan masalah ini.
sumber
Daftar adalah banyak nama simbol (individu) yang terikat pada salah satu dari jenis, kualitas stabil. Di dalam spesifikasi, individu dapat dilihat berdasarkan karakter, dan hitungan itu sendiri dapat diulangi.
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.
enum kelas
Kelas dasar untuk membuat konstanta yang terdaftar. Lihat segmen Fungsional API untuk tata bahasa pengembangan lainnya.
kelas enum.IntEnum
Kelas dasar untuk membuat konstanta terdaftar yang juga subkelas 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 int.
kelas enum. Bendera
Kelas dasar untuk membuat konstanta terdaftar yang dapat dikonsolidasikan menggunakan tugas bitwise tanpa kehilangan pendaftaran Bendera mereka.
enum.unique ()
Penghias kelas Enum yang menjamin hanya satu nama terikat dengan nilai apa pun.
kelas enum.auto
Contoh digantikan dengan insentif yang sesuai untuk individu Enum. Awal yang layak dimulai pada 1.
Baru dalam varian 3.6: Bendera, IntFlag, a
sumber