A partir del 1.3.17, ya no se necesita ninguna solución alternativa
La respuesta a continuación terminó en los documentos como ARRAY de ENUM . Esta página de documentos ahora dice:
Respuesta anterior con fines históricos:
Miré el Problema 3467 publicado por Wichert Akkerman, y esta solución fue publicada. Crédito a Mike Bayer. Declare la siguiente clase en su código (con las importaciones necesarias, por supuesto):
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
ahora es un tipo de columna especial que se usa en la definición del modelo.
Así que en lugar de
class Judge(db.Model):
statuses = db.Column(ARRAY(status))
Ahora puedes hacer:
class Judge(db.Model):
statuses = db.Column(ArrayOfEnum(status))
Ahora en su código puede asignar valores a statuses
con una lista y hará la conversión adecuada al guardar:
my_judge_object.status = ['unmoderated', 'nominee']