Code :
# your data tables spatialobjects_table = Table('spatialobjects', metadata, Column('unique_ID', Unicode, primary_key=True), Column('name', Unicode), Column('children_id', Unicode, ForeignKey('spatialobjects.unique_ID')), Column('type', Unicode, nullable=False) ) systems_table = Table('systems', metadata, Column('unique_ID', Unicode, ForeignKey('spatialobjects.unique_ID'), primary_key=True) ) stars_table = Table('stars', metadata, Column('unique_ID', Unicode, ForeignKey('spatialobjects.unique_ID'), primary_key=True) ) planets_table = Table('planets', metadata, Column('unique_ID', Unicode, ForeignKey('spatialobjects.unique_ID'), primary_key=True) ) # your model classes class SpatialObject(object): pass class System(SpatialObject): pass class Star(SpatialObject): pass class Planet(SpatialObject): pass # set up mappers between your data tables and classes mapper(SpatialObject, spatialobjects_table, polymorphic_on=spatialobjects_table.c.type, polymorphic_identity='spatialobject', properties={'children':relation(SpatialObject, backref=backref('parent', remote_side=[spatialobjects_table.c.unique_ID]))}) mapper(System, systems_table, inherits=SpatialObject, polymorphic_identity='system') mapper(Star, stars_table, inherits=SpatialObject, polymorphic_identity='star') mapper(Planet, planets_table, inherits=SpatialObject, polymorphic_identity='planet')
|