我是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
,而实际表又子类化Base
和BaseConfig
:
class BaseConfig(object):
# ...
class MyModel(BaseConfig, Base):
# ...
或只需使用
__abstract__
:class BaseConfig(Base):
__abstract__ = True