2015-03-06 12 views
8

के साथ SQLAlchemy में ENUM प्रकार मैं पोस्टग्रेस्क्ल डेटाबेस के साथ SQLAlchemy core का उपयोग कर रहा हूं और मैं ENUM को अपनी तालिका परिभाषा में जोड़ना चाहता हूं। postgresql documentation के अनुसार, Enum प्रकार पूर्व तालिका बनने परिभाषित किया जाना चाहिए:पोस्टग्रेएसक्यूएल

CREATE TYPE gender_enum AS ENUM ('female', 'male'); 

CREATE TABLE person (
    name VARCHAR(20), 
    gender gender_enum 
); 

समस्या है जब मैं तालिका परिभाषा बना रहा हूं। SQLAlchemy documentation पढ़ने के बाद मुझे कोई कार्यान्वयन उदाहरण नहीं मिला। मैंने ऐसा कुछ करने की कोशिश की है लेकिन यह काम नहीं किया:

from sqlalchemy.dialects.postgresql import ENUM 

person = Table('user_profile', metadata, 
    Column('name', String(20)), 
    Column('gender', ENUM('female','male')) 
); 

यह कैसे किया जाना चाहिए?

उत्तर

11

आप एक SQLAlchemy से Enum आयात और इसे करने के लिए कोई नाम जोड़ने की जरूरत है। यह इस तरह काम करना चाहिए:

from sqlalchemy import Enum 

person = Table("user_profile", metadata, 
    Column("name", String(20)), 
    Column("gender", Enum("female", "male", name="gender_enum", create_type=False)) 
); 
+2

इसके लिए मेरे लिए पोस्टग्रेज़ के साथ काम करने के लिए, मुझे 'sqlalchemy.dialects.postgresql आयात ENUM' – miah

14

@ टिम जवाब निश्चित रूप से सही है, लेकिन मैं जिस तरह से मैं सेटअप मेरे enums की पेशकश करना चाहता था।

मेरी models.py में मैं tuples

skill_levels = ('Zero', 'A little', 'Some', 'A lot')

तो मैं एक skill_level_enum चर बना सकते हैं और यह args के रूप कौशल स्तर मूल्यों के साथ एक Enum वर्ग आवंटित करेगा के रूप में मूल्यों का निर्माण करेगा।

skill_level_enum = ENUM(*skill_levels, name="skill_level")

मेरी मेज मॉडल में तो मैं skill_level_enum

class User(db.Model): 
    id = db.Column(db.Integer(), primary_key=True) 
    skill_level = db.Column(skill_level_enum) 

मैं पाया है में पारित यह मेरा कोड एक बहुत स्वच्छ बनाता है और मैं शीर्ष पर skill_levels को अपडेट कर पाएंगे हूँ अद्यतन करने के लिए सही चीज़ के लिए मेरे मॉडल स्कैन करने की बजाय मेरी फाइल का।

+0

से कई तरह से इस तरह के enum definion का पुन: उपयोग कर सकते हैं? – filiprem

+0

यह सही है, आप एक बार enum को परिभाषित कर सकते हैं और जहां भी आपको आवश्यकता हो वहां इसका उपयोग कर सकते हैं। – m1yag1

संबंधित मुद्दे