Решение Ants Aasma гораздо более элегантно, но если вы намеренно держите определения классов отдельно от определений таблиц, вам необходимо отобразить ваши классы на таблицы с помощью функции mapper. После того, как вы определили свои классы, вам нужно определить свои таблицы:
building = Table('building', metadata,
Column('id', Integer, primary_key=True),
Column('x', Integer),
Column('y', Integer),
)
commercial = Table('commercial', metadata,
Column('building_id', Integer, ForeignKey('building.id'), primary_key=True),
Column('business', String(50)),
)
residential = Table('residential', metadata,
Column('building_id', Integer, ForeignKey('building.id'), primary_key=True),
Column('numResidents', Integer),
)
Затем вы можете сопоставить таблицы с классами:
mapper(Building, building)
mapper(Commercial, commercial, inherits=Building, polymorphic_identity='commercial')
mapper(Residential, residential, inherits=Building, polymorphic_identity='residential')
Затем взаимодействуйте с классами точно так же, как описал Муравей Аасма.