The game got off to a flying start, with the visitors scoring in the opening 3 minutes. Marc Joseph lost possession after stumbling over the ball and Marc Richards nipped in to fire a 25-yard shot into the top corner of Boaz Myhill's goal, with the City 'keeper not even moving.
But City were level five minutes later thanks to Stuart Elliott. Ben Burgess headed on to Danny Allsopp who again headed the ball over the Northampton defence to Elliott, who just managed to poke the ball over Lee Harper and into the net.
Burgess almost gave City the lead 10 minutes later, but Harper did well to turn his superb 20-yard shot around the post.
However, Eric Sabin regained Northampton's lead in the 21st minute in fortuitous circumstances as the ball ricocheted off him inside the 6 yard box and into the net.
Sabin knew exactly what he was doing when he made it 3-1 10 minutes later. He raced through and shot past Myhill when one-on-one, with Richard Hinds unable to get back to stop it going in.
Andy Dawson and Scott Wiseman were both brought on at half time. Allsopp had a powerless header caught and Delaney shot over, before the breakthrough came in the 69th minute. City were awarded a free kick five yards outside the Northampton area, and Dawson curled in his third goal of the season.
John Taylor and Martin Smith both blasted over good chances to regain Town's two-goal lead, while Stuart Green hit the post at the other end, but the equaliser wasn't to come. Northampton are now only the third team to beat City at the KC Stadium this season with today's 3-2 victory.
City line-up (4-4-2): Myhill; Thelwell (Dawson 45), Joseph, Hinds (Wiseman 45), Delaney; France (Walters 68), Ashbee, Green, Elliott; Allsopp, Burgess.
Un-used subs: Musselwhite, Lewis.