Sqlalchemy(和alembic)具体表继承没有多态联合

时间:2014-10-07 08:33:48

标签: python sqlalchemy alembic

我是SQLAlchmey的新手,我试图实现以下对象/ db表结构(也使用alembic):

class BaseConfig(Base):
 pk = Column(Integer, primary_key=True)
 name = Column(Unicode(150), nullable=False, unique=True)
 ...
 # Lots of other general columns, such as description, display_name, creation time etc.

我希望所有其他配置类继承它的预定义列:

class A(BaseConfig):
  __tablename__ = "A"
  column1 = Column...
  column2 = Column...

class B(BaseConfig):
  __tablename__ = "B"
  column1 = Column...
  column2 = Column...

BaseConfig 表不是真正的表,只是一个包含公共列的类。 除此之外 - A和B之间没有任何关系,也不需要共享的pk等。似乎使用" polymorphic_union "这里也不相关。

通过尝试运行alembic autogenerate我得到BaseConfig没有表映射类的错误 - 这是真的,我真的没有看到添加"多态联合的原因#34; BaseConfig的选项,因为这个类是通用的。 有什么建议? (在Django与南方,这开箱即用,但似乎这种行为似乎不容易支持。)

谢谢, 李

1 个答案:

答案 0 :(得分:6)

使用MixIns(阅读文档的Mixing in Columns部分),BaseConfig执行子类Base,实际表将Base子类化}和BaseConfig

class BaseConfig(object):
    # ...

class MyModel(BaseConfig, Base):
    # ...

只需使用__abstract__

class BaseConfig(Base):
    __abstract__ = True