过去一年我一直在使用Postgres和SQLAlchemy的枚举数组,如下所示:
class MyModel(BaseModel):
enum_field = Column(postgresql.ARRAY(EnumField(MyEnum, native_enum=False)))
EnumField
来自于sqlalchemy_enum34库,它是一个小的包装器,可将Python枚举用作Python表示形式,而不是字符串。尽管文档中说,不支持枚举数组,但我猜它能工作,因为我选择了'native_enum=False'。 最近我注意到它不再工作了,我认为这是由于从SQLA 1.0升级到1.1所致,但我不确定。
问题是它生成了无效的DQL:
CREATE TABLE my_model (
enum_field VARCHAR(5)[3] NOT NULL CHECK (contexts IN ('ONE', 'TWO', 'THREE'))
)
我收到的错误信息是:
ERROR: malformed array literal: "ONE"
DETAIL: Array value must start with "{" or dimension information.
你有什么想法来找回我的枚举数组吗?顺便说一句:当它起作用时,实际上没有创建 CHECK 约束,只创建了一个可变长度的数组。只要我可以在 Python 代码中使用枚举(例如
query.filter(enum_field==MyEnum.ONE)
),我就没问题。请注意不要修改 HTML 标签。
MyEnum
是什么?它可以像以下代码一样是一个Python类,例如Genres
吗:class Genres(enum.Enum):
linebreakalternative ='Alternative'
linebreakblues ='Blues'
? - NdrslmpkMyEnum
是你代码中定义的任何enum.Enum
子类 :) - kolypto