1.3.17 से, अब किसी समाधान की आवश्यकता नहीं है
नीचे दिया गया उत्तर डॉक्स में के रूप में समाप्त हुआ ENUM की सरणी . यह दस्तावेज़ पृष्ठ अब कहता है:
ऐतिहासिक उद्देश्यों के लिए पुराना उत्तर:
मैंने अंक 3467 देखा Wichert Akkerman द्वारा पोस्ट किया गया था, और यह वर्कअराउंड पोस्ट किया गया था। माइक बेयर को श्रेय। अपने कोड में निम्न वर्ग घोषित करें (निश्चित रूप से आवश्यक आयात के साथ):
from sqlalchemy.dialects.postgresql import ARRAY
from sqlalchemy import cast
class ArrayOfEnum(ARRAY):
def bind_expression(self, bindvalue):
return cast(bindvalue, self)
def result_processor(self, dialect, coltype):
super_rp = super(ArrayOfEnum, self).result_processor(dialect, coltype)
def handle_raw_string(value):
if value==None:
return []
inner = re.match(r"^{(.*)}$", value).group(1)
return inner.split(",")
def process(value):
return super_rp(handle_raw_string(value))
return process
ArrayOfEnum
अब एक विशेष स्तंभ प्रकार है जिसका उपयोग मॉडल परिभाषा में किया जाता है।
तो इसके बजाय
class Judge(db.Model):
statuses = db.Column(ARRAY(status))
अब आप यह कर सकते हैं:
class Judge(db.Model):
statuses = db.Column(ArrayOfEnum(status))
अब अपने कोड में आप statuses
. को मान निर्दिष्ट कर सकते हैं एक सूची के साथ और यह सहेजने पर उचित कास्टिंग करेगा:
my_judge_object.status = ['unmoderated', 'nominee']