我是SQLAlchmey的新手,我正在尝试实现以下对象/数据库表结构(也通过使用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自动生成,我得到一个错误,即BaseConfig没有表映射类-这是正确的,而且我真的没有看到向BaseConfig添加“多态联合”选项的原因,因为此类是通用的。
有什么建议么? (在带有south的Django中,此方法是开箱即用的,但在这里似乎不容易支持此行为)。

谢谢,

最佳答案

都可以使用MixIns(请阅读文档的Mixing in Columns部分),其中您的BaseConfig不子类Base,而实际表又子类化BaseBaseConfig

class BaseConfig(object):
    # ...

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


或只需使用__abstract__

class BaseConfig(Base):
    __abstract__ = True

09-27 15:57