After a cagey start to the game, Thembinkosi Lorch broke through the defence in the 10th minute with a perfectly-timed attacking run. Shu-Aib Walters rushed out to close him down and force the corner.
From the passage of play following the resulting set-piece, Musa Nyatama found space to get a shot away. However, perhaps not having anticipated the chance, he fired over the bar.
City responded with a brief spell of dominance, forcing Wayne Sandilands into a series of fine saves.
Arguably the visitors’ best early chance came 16 minutes in, when Ayanda Patosi found himself in space and fired a shot at goal. However, Sandilands was able to block it.
In the 33rd minute, City got the ball in the back of the net as Lehlohonolo Majoro got on the end of a cross from the right and his shot went in off Sandilands. However, the goal was controversially disallowed as the referee thought he saw a foul.
That proved to be the last major talking point of the half as the teams went in all square at the FNB Stadium.
Benni McCarthy made the first substitution of the game at half-time, bringing Letsie Koapeng on for Roland Putsche.
In the 52nd minute, Milutin Sredojević took a gamble, replacing Bernard Morrison with 17-year-old Lyle Foster.
Seven minutes later, the Serb played his hand again, bringing Thabiso Kutumela on for Mpho Makola.
Pirates began to dominate the game around the hour mark. Sixty-nine minutes in Thabo Matlaba came relatively close to scoring, fizzing a low shot just wide of the right post.
This was to be the final straw for McCarthy. Two minutes later, he made a double change, introducing Edmilson Dove and Victor Obinna to the game in place of Patosi and Majoro.
Nevertheless, Pirates had another great chance in the 75th minute as Foster’s attacking run put him in acres of space. Once again, Walters was lightning quick off his line, catching the youngster in two minds. His tame finish was thus easily cut out.
Pirates made their final change right afterwards, bringing Lorch off for Amigo Memela.
In the 82nd minute, Pirates carved the City defence open with a lightning fast break. Foster whipped the ball in from the right and Qalinge capitalised on Walters’ failure to hold it, slotting the ball home.
That proved the decisive moment as Pirates clung on to claim all three points.