Mulai 1.3.17, tidak ada solusi yang diperlukan lagi
Jawaban di bawah ini berakhir di dokumen sebagai ARRAY dari ENUM . Halaman dokumen ini sekarang mengatakan:
Jawaban lama untuk tujuan historis:
Saya melihat Masalah 3467 diposting oleh Wichert Akkerman, dan solusi ini telah diposting. Kredit untuk Mike Bayer. Deklarasikan kelas berikut dalam kode Anda (tentu saja dengan impor yang diperlukan):
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
sekarang menjadi tipe kolom khusus yang digunakan dalam definisi model.
Jadi, alih-alih
class Judge(db.Model):
statuses = db.Column(ARRAY(status))
Sekarang Anda dapat melakukan:
class Judge(db.Model):
statuses = db.Column(ArrayOfEnum(status))
Sekarang dalam kode Anda, Anda dapat menetapkan nilai ke statuses
dengan daftar dan itu akan melakukan casting yang tepat setelah menyimpan:
my_judge_object.status = ['unmoderated', 'nominee']