sqlalchemy中的查询枚举列导致LookupError

时间:2018-11-05 19:52:46

标签: python python-3.x postgresql sqlalchemy

我以为我正在按照文档密切配合使用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:“未知”不在已定义的枚举值之中

“未知”在枚举中。我在某个地方缺少将查询连接到枚举类的步骤吗?

1 个答案:

答案 0 :(得分:2)

=定义中应该为enum,而不是:

class contact_types(enum.Enum):
    unknown = 1
    incoming_text = 2
    incoming_call = 3
    outgoing_call = 4