【发布时间】:2017-05-06 14:48:45
【问题描述】:
在过去的一年里,我一直在使用一系列带有 postgres 和 SQLAlchemy 的枚举,如下所示:
class MyModel(BaseModel):
enum_field = Column(postgresql.ARRAY(EnumField(MyEnum, native_enum=False)))
EnumField 来自 sqlalchemy_enum34 库,它是内置枚举的一个小型包装器,它使用 Python 枚举作为 Python 表示而不是字符串。
虽然docs say, 枚举数组不受支持,但我想它有效,因为我选择了'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)),我就可以接受。
【问题讨论】:
标签: python arrays postgresql enums sqlalchemy