MySQL ENUM değerlerinin adlarında boşluk varsa Python Enum özelliklerini nasıl tanımlayabilirim?


10

Python'um var Enum sınıfı :

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

MYSQL veritabanında kıdem ENUM sütununda "Intern", "Junior Engineer", "Medior Engineer", "Senior Engineer" değerleri bulunur.

Sorun şu ki bir hata alıyorum:

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

Bu hata, aşağıdaki gibi sorgu çağırdığımda oluştu:

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

seniorityUserPropertymodelin enum özelliğidir .

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

Bu sınıf için kullanıyorum Şema sınıfı tanımladığınız marshmallow Schemave EnumFieldgelen marshmallow_enumpaketin:

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

Bu durumda ne yapmalı, çünkü boşlukla python sınıfı özellik adını tanımlayamıyorum. Python'u özellik adları yerine tanımlı özelliklerin değerlerini kullanmaya zorlamak nasıl?


2
bunun yardımcı olup olmadığına bakın notinventedhere.org/articles/python/…
Shenanigator

Yanıtlar:


3

Shenanigator'un sorumun yorumunda belirttiği gibi, bu sorunu çözmek için takma adları kullanabiliriz.

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

Bir liste, türden, sabit niteliklerden birine bağlı birçok sembolik isimdir (bireyler). Bir spesifikasyon içinde bireylere karakter ile bakılabilir ve sayımın kendisi tekrarlanabilir.

Modül İçeriği

Bu modül, adların ve niteliklerin dikkate değer düzenlemelerini karakterize etmek için kullanılabilecek dört özellik sınıfını karakterize eder: Enum, IntEnum, Flag ve IntFlag. Aynı şekilde, bir dekoratörü, bir tür () ve bir yardımcı, otomatik karakterize eder.

sınıf enum.Enum

Listelenen sabitleri yapmak için temel sınıf. Diğer bir geliştirme dil bilgisi için İşlevsel API segmentine bakın.

sınıf enum.IntEnum

Ayrıca int alt sınıfları listelenen sabitleri yapmak için temel sınıf.

sınıf enum.IntFlag

IntFlag katılımlarını kaybetmeden bitsel yöneticiler kullanılarak birleştirilebilen listelenmiş sabitleri oluşturmak için temel sınıf. IntFlag bireyleri ek olarak int.

sınıf enum.Flag

Bayrak kaydını kaybetmeden bitsel görevler kullanılarak birleştirilebilen listelenmiş sabitleri oluşturmak için temel sınıf.

enum.unique ()

Sadece bir ismi garanti eden Enum sınıfı dekoratör herhangi bir değere bağlıdır.

sınıf enum.auto

Örnekler, Enum bireyleri için uygun bir teşvikle desteklenir. 1'den başlamaya değer başlangıçlar.

3.6 versiyonunda yeni: Bayrak, IntFlag, a

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.