<p>你需要<a href="http://docs.sqlalchemy.org/en/rel_0_7/orm/extensions/declarative.html#abstract" rel="nofollow">abstract special directive</a>或<a href="http://docs.sqlalchemy.org/en/rel_0_7/orm/extensions/declarative.html#mixin-and-custom-base-classes" rel="nofollow">mixin pattern</a>。</p>
<p>对于mixin,您可以使用以下内容:</p>
<pre><code>class MyMixin(object):
__tablename__ = 'document'
__table_args__ = {
'schema': 'app'
}
id = Column(types.Integer, primary_key=True)
nom = Column(types.Unicode(256), nullable=False)
date = Column(types.Date())
class Arrete(MyMixin, Base):
__tablename__ = 'arrete'
__mapper_args__ = {'polymorphic_identity': 'arrete'}
foreign_id = Column(types.Integer, ForeignKey('app.document.id'), primary_key=True)
numero_arrete = Column(types.Integer)
date_arrete = Column(types.Date())
class Document(MyMixin, Base):
__tablename__ = 'Document'
type_document = Column(types.Enum('arrete', 'photographie',
name='TYPES_DOCUMENT_ENUM'))
__mapper_args__ = {'polymorphic_on': type_document}
</code></pre>
<p>共享的东西放在mixin中,非共享的东西放在子类中。</p>