これは、 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))
この二重表現を取得する方法についてのアイデアはありますか?