我查看了Wichert Akkerman发布的Issue
3467,并发布了此变通办法。感谢Mike Bayer。在代码中声明以下类(当然,带有必要的导入):
from sqlalchemy.dialects.postgresql import ARRAYfrom sqlalchemy import castclass 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 processArrayOfEnum现在是在模型定义中使用的特殊列类型。
所以代替
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']



