1

这是对best-way-to-do-enum-in-sqlalchemy非常有趣的答案的后续。Cito 扩展了 Zzzeeks 的答案以包括非常好的排序。Cito 在结尾处还留下了一段诱人的代码。

class DeclEnumType(SchemaType, TypeDecorator):
    """DeclEnum augmented so that it can persist to the database."""

这正是我试图构建一个 Python 枚举,它在数据库中自己的表中表示。EmployeeType.full_time 在 Python 代码中可用并且在 DB 中有自己的表(对于这个简单的示例,只有一个 idx 和名称)。

但是,我不确定我是否了解如何使用 Cito 的 DeclEnumType 示例,因为以下示例不会在数据库中创建 EmployeeType 表。

class EmployeeType(DeclEnum):
    # order will be as stated: full_time, part_time, contractor
    full_time = EnumSymbol("Full Time")
    part_time = EnumSymbol("Part Time")
    contractor = EnumSymbol("Contractor")

class Employee(Base):
    __tablename__ = 'employee'

    id = Column(Integer, primary_key=True)
    name = Column(String(60), nullable=False)
    type = Column(DeclEnumType(EmployeeType))

关于如何获得这种双重表示的任何想法?

4

1 回答 1

1

如果我没记错的话,这样做:

type = Column(EmployeeType.db_type())

代替

type = Column(DeclEnumType(EmployeeType))

应该这样做。

于 2013-02-22T23:38:46.503 回答