1.3.17以降、回避策は不要になりました
以下の回答は、ドキュメントにとして表示されました。 ENUMの配列 。このドキュメントページには次のように書かれています:
歴史的な目的のための古い答え:
Issue3467 を見ました 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']