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."""

これはまさに、db 内の独自のテーブルで表される Python Enum を構築しようとしていることです。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 に答える