Vanaf 1.3.17 is er geen tijdelijke oplossing meer nodig
Het onderstaande antwoord kwam in de documenten terecht als ARRAY van ENUM . Deze documentenpagina zegt nu:
Oud antwoord voor historische doeleinden:
Ik heb gekeken naar Issue 3467 gepost door Wichert Akkerman, en deze work-around is geplaatst. Met dank aan Mike Bayer. Declareer de volgende klasse in je code (met de nodige invoer natuurlijk):
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
is nu een speciaal kolomtype dat wordt gebruikt in de modeldefinitie.
Dus in plaats van
class Judge(db.Model):
statuses = db.Column(ARRAY(status))
Nu kunt u het volgende doen:
class Judge(db.Model):
statuses = db.Column(ArrayOfEnum(status))
Nu kunt u in uw code waarden toewijzen aan statuses
met een lijst en het zal de juiste casting doen bij het opslaan:
my_judge_object.status = ['unmoderated', 'nominee']