这是一个后续行动的best-way-to-do-enum-in-sqlalchemy非常有趣的答案。 Cito将Zzzeeks的答案扩展到包括非常好的订购。 Cito在结尾处也留下了一些诱人的代码。SQLAlchemy的枚举代码表示_and_ DB表示
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))
关于如何获得这种双重表示的任何想法?
以及你需要扭转的方式,回到原来的做法,在那里你犯了一个新的映射类EmployeeType,那么每个EnumSymbol()以上其实EmployeeType的一个实例。为了让“看”之类的更简洁的方法,你需要使用元类和各种代理对象和这样的隐藏到底发生了什么的,因为这些EmployeeType情况现在依然存在,并且是唯一只有一个会话等。 - 可行但错综复杂。从Employee到EmployeeType的链接将通过relationship()。 – zzzeek 2013-02-24 21:23:07
有趣的Zzzeek。我对SQLAlchemy相当陌生,但在文档和示例中似乎有一些很好的元类示例。我会锤击它。 – rhaskett 2013-02-25 15:39:35
我对上面的Zzzeek有点困惑。是不是EmployeeType具有EmployeeType的EnumSymbol自引用? – rhaskett 2013-02-25 17:13:48