class Node(Repr, Base): __tablename__ = 'confignode' name = Column(String, name = 'node', primary_key = True) last_report_time = Column(DateTime) GroupMember = Table( 'configgroupmember', Base.metadata, Column('node', String, ForeignKey('confignode.node')), Column('groupid', Integer, ForeignKey('configgroup.id')), PrimaryKeyConstraint('node', 'groupid') ) class Group(Repr, Base): __tablename__ = "configgroup" id = Column(Integer, primary_key = True) name = Column(String) _parent = Column(Integer, ForeignKey('configgroup.id'), name = 'parent') parent = relationship("Group", remote_side = "Group.id") children = relationship("Group", remote_side = 'Group._parent') nodes = relationship(Node, secondary = GroupMember)