我以为我正在按照文档密切配合使用sqlalchemy在Postgres DB中设置一个ENUM字段,但是我显然在做某事(希望很简单)。
我的表的类型为contact_type
:
List of data types
Schema | Name | Internal name | Size | Elements | Owner | Access privileges | Description
--------+---------------+---------------+------+---------------+----------+-------------------+-------------
public | contact_types | contact_types | 4 | unknown +| postgres | |
| | | | incoming_text+| | |
| | | | incoming_call+| | |
| | | | outgoing_call | | |
并在表格中:
Table "public.calls"
Column | Type | Modifiers
--------------+--------------------------+----------------------------------------------------
contact_type | contact_types |
在python中,我每个the docs创建了enum
的子类:
import enum
class contact_types(enum.Enum):
unknown: 1
incoming_text: 2
incoming_call: 3
outgoing_call: 4
并将其传递给模型:
class Call(db.Model):
contact_type = db.Column(db.Enum(contact_types))
一切看起来不错。插入工作后,我可以在查看表时看到这些值,但查询时SQLAlchemy的验证似乎不满意。这会导致错误:
calls = Call.query.order_by(Call.time.desc()).limit(pagesize).offset(offset)
for c in calls:
print(c)
LookupError:“未知”不在已定义的枚举值之中
“未知”在枚举中。我在某个地方缺少将查询连接到枚举类的步骤吗?
答案 0 :(得分:2)
在=
定义中应该为enum
,而不是:
class contact_types(enum.Enum):
unknown = 1
incoming_text = 2
incoming_call = 3
outgoing_call = 4