我在SqlAlchemy中使用Joined Table Inheritance
和一个ParentTypes
表构造一组表,其中包含所有不同类型的子类表作为字符串。在
{many}表与这个表有一个
下面是一个简单的3表模式,其中Child
继承{polymorphic_identity
。{{cd6}可能只是为了避免在cd6}字段之间使用{cd6}来改变。在
from sqlalchemy import *
from sqlalchemy.orm import *
metadata = MetaData()
parentTypesTable = Table(
'ParentTypes', metadata,
Column('parentTypeId', Integer, primary_key=True),
Column('name', String, unique=True)
)
parentsTable = Table(
'Parents', metadata,
Column('parentId', Integer, primary_key=True),
Column('parentTypeId', Integer, ForeignKey('ParentTypes.parentTypeId'))
)
childrenTable = Table(
'Children', metadata,
Column('parentId', Integer, ForeignKey('Parents.parentId'), primary_key=True)
)
class ParentType(object): pass
class Parent(object): pass
class Child(Parent): pass
mapper(ParentType, parentTypesTable)
mapper(Parent, parentsTable,
polymorphic_on= # How might I access ParentType's name column?
)
mapper(Child, childrenTable, inherits=Parent, polymorphic_identity="child")
在这种情况下,由于表和数据预先存在,一个简单的解决方案是加载与文本鉴别器匹配的整数值,并使用它们,以及
在构造映射器之前加载值可以使用核心
Table
定义完成,之后设置polymorphic_identity=
参数是一个简单的查找问题。在如果您的模式有点不同,您也可以尝试mapping against a join of 2 tables,但由于鉴别器值与每个对象的其他数据一起单独插入,并且您的
ParentTypes.name
是唯一的,因此不能使用该解决方案。在相关问题 更多 >
编程相关推荐