यदि MySQL ENUM मान उनके नाम में स्थान रखते हैं तो पायथन एनम गुणों को कैसे परिभाषित करें?


10

मेरे पास Enumइस तरह का पायथन वर्ग है:

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

MYSQL डेटाबेस में, वरिष्ठता ENUM कॉलम में "इंटर्न", "जूनियर इंजीनियर", "मेडियर इंजीनियर", "सीनियर इंजीनियर" जैसे मूल्य हैं।

समस्या यह है कि मुझे एक त्रुटि मिलती है:

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

यह त्रुटि तब हुई है जब मैं क्वेरी को कॉल करता हूं जैसे:

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

seniorityUserPropertyमॉडल में संपत्ति है ।

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

इस वर्ग के लिए मैंने स्कीमा वर्ग को पैकेज के उपयोग से marshmallow Schemaऔर परिभाषित किया है :EnumFieldmarshmallow_enum

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

इस स्थिति में क्या करना है, क्योंकि मैं अंतरिक्ष के साथ अजगर वर्ग की संपत्ति के नाम को परिभाषित नहीं कर सकता। संपत्ति के नामों के बजाय परिभाषित गुणों के मूल्यों का उपयोग करने के लिए अजगर को मजबूर कैसे करें?


2
देखना है कि अगर यह मदद करता है notinventedhere.org/articles/python/...
Shenanigator

जवाबों:


3

जैसा कि शेनानीगेटर ने मेरे प्रश्न की टिप्पणी में कहा है, हम इस समस्या को हल करने के लिए उपनाम का उपयोग कर सकते हैं।

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.Enum

सूचीबद्ध स्थिरांक बनाने के लिए आधार वर्ग। अन्य विकास व्याकरण के लिए खंड कार्यात्मक एपीआई देखें।

वर्ग enum.IntEnum

सूचीबद्ध स्थिरांक बनाने के लिए आधार वर्ग जो इसके अतिरिक्त int के उपवर्ग हैं।

वर्ग enum.IntFlag

सूचीबद्ध कॉन्स्टेंट बनाने के लिए बेस क्लास जिन्हें इंटिफलैग भागीदारी को खोने के बिना बिटवाइज़ एडमिनिस्ट्रेटर्स का उपयोग करके समेकित किया जा सकता है। IntFlag व्यक्तियों के अलावा int के उपवर्ग हैं।

वर्ग enum.Flag

सूचीबद्ध कॉस्टेंट बनाने के लिए बेस क्लास जिन्हें उनके ध्वज नामांकन को खोने के बिना बिटवाइज कार्यों का उपयोग करके समेकित किया जा सकता है।

enum.unique ()

Enum वर्ग डेकोरेटर जो केवल एक नाम की गारंटी देता है वह किसी एक मूल्य के लिए बाध्य है।

वर्ग enum.auto

Enum व्यक्तियों के लिए उपयुक्त प्रोत्साहन के साथ उदाहरणों को दबाया गया है। 1 से शुरुआत के लायक शुरुआत।

वैरिएंट 3.6 में नया: फ्लैग, इंटफ्लैग, ए

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.