Uggla's shot staked the Braves to a 4-0 lead and gave a victory to Randall Delgado (3-5), who held the Cardinals to three runs on six hits in a 5 1/3-inning start.
Atlanta's bullpen limited St. Louis to one run the rest of the game, with Craig Kimbrel picking up his 14th save in a 1-2-3 ninth inning.
Michael Bourn also went deep for the Braves, who notched their first victory since May 20.
Yadier Molina went 4-for-4 with a solo homer and three RBI for St. Louis.
Cards starter Jake Westbrook (4-4) logged his fourth straight start without a win, coughing up five runs (four earned) on five hits through five full frames.