The Cardinals kept pressure on Pittsburgh in the National League Central by winning their third in a row.
Wainwright (15-7) gave up six hits and struck out nine while going the distance for the fifth time this season. It was the 16th complete game of his nine-year career.
He had not recorded a win since July 21, when he went eight innings against San Diego.
Matt Holliday snapped a 1-1 tie in the sixth with a solo homer, his 17th of the year. Wainwright earned himself an insurance run in the seventh with a sacrifice fly.
The Braves, who began the night with a 14-game lead over Washington in the National League East, lost their second in a row.