Python 在SqlAlchemy中映射多级类继承层次结构 背景
我有一个现有的数据库,其中包含3个级别的依赖表。这里我给出了一个三层连接表继承映射问题的示例,我无法解决这个问题。不幸的是,我无法更改数据库设计 问题 如果我执行:Python 在SqlAlchemy中映射多级类继承层次结构 背景,python,inheritance,sqlalchemy,hierarchy,Python,Inheritance,Sqlalchemy,Hierarchy,我有一个现有的数据库,其中包含3个级别的依赖表。这里我给出了一个三层连接表继承映射问题的示例,我无法解决这个问题。不幸的是,我无法更改数据库设计 问题 如果我执行: entities = session.query(Entity) for ent in entities: print ent.isin 我得到一个错误: AttributeError: 'Asset' object has no attribute 'isin' 但是,以下代码执行良好: entities = sess
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
问题:
因此属性组合
是可访问的,但不是isin
很明显,类实体
和资产
正在映射,但未列出。为什么会这样
我相信sqlalchemy能够映射到任意深度的继承
我读了文件,尝试了所有的方法,我被难倒了。请帮忙
继承映射
我想这可能只是与你的数据巧合
你应该迭代你想要查看的特定类型的对象,例如
entities = session.query(Asset)
for ent in entities:
print ent.composition
及
或者在访问对象类型的属性之前检查对象类型
entities = session.query(Entity)
for ent in entities:
if isinstance(ent, Asset):
print ent.composition
else isinstance(ent, Listing):
print ent.isin
否则,您将得到一个实体对象,它将是列表
或资产
对象。如果对属性isin
进行硬编码,则在处理资产对象时,该属性将中断,因为资产对象没有isin
属性。对于所列类,映射器参数中似乎缺少多态性。@justin solms:您正在询问同一个问题在一个月内已经问了三次了,看来没有人能帮你解决这个问题。如果您真的非常需要它,我建议您与sqlalchemy
的创建者联系,寻求建议。
entities = session.query(Listed)
for ent in entities:
print ent.isin
entities = session.query(Entity)
for ent in entities:
if isinstance(ent, Asset):
print ent.composition
else isinstance(ent, Listing):
print ent.isin