0
背景
我有一个具有3级依赖表的现有数据库。这里我给出一个3级连接表的示例,我无法解决的继承映射问题。不幸的是我无法改变数据库设计。在SqlAlchemy中映射多级别类继承层次结构
问题
如果我执行:
entities = session.query(Entity)
for ent in entities:
print ent.isin
我得到的错误:
AttributeError: 'Asset' object has no attribute 'isin'
然而,下面的代码执行罚款:
entities = session.query(Entity)
for ent in entities:
print ent.composition
问题
所以属性composition
可以访问,但是不是isin
!?!?
它似乎很明显的是,类Entity
和Asset
被映射,但不Listed
。为什么会这样?
我会认为sqlalchemy将能够映射到任意深度的继承。
我已阅读文档,尝试了一切,我很难过。请帮忙。
继承映射
class Entity(Base):
__tablename__ = 'entity'
id = Column(Integer, primary_key=True)
name = Column(String)
entity_type = Column('type',String)
source_table_id = Column(Integer)
__mapper_args__ = {
'polymorphic_identity':'entity',
'polymorphic_on':entity_type,
}
class Asset(Entity):
__tablename__ = 'asset'
id = Column('entity_id',Integer, ForeignKey('entity.id'), primary_key=True)
asset_type = Column('type',String)
asset_class = Column('class',String)
composition = Column(String)
__mapper_args__ = {
'polymorphic_identity':'asset',
'polymorphic_on':asset_type,
}
class Listed(Asset):
__tablename__ = 'listed'
id = Column('asset_entity_id',Integer, ForeignKey('asset.entity_id'), primary_key=True)
ticker = Column(String)
isin = Column(String)
__mapper_args__ = {
'polymorphic_identity':'listed',
}
您似乎缺少'Listed'类映射参数中的'polymorphic_on'。 – mjallday 2014-09-22 18:42:44
@ justin-solms:你已经在一个月内三次提出同样的问题,而且看起来没有人能帮你解决这个问题。如果你确实需要这么做,我建议你与'sqlalchemy'的创建者[Mike Bayer](http://techspot.zzzeek.org/)联系以获得建议。 – van 2014-09-23 05:16:48