Craig has 12 hits and six RBIs during a seven-game hitting streak for the Cardinals, who took two of three in both series against the Padres this season. The St. Louis defense turned three double plays behind Wainwright (13-5), who allowed two runs with seven strikeouts and worked around two walks.
Craig's leaping catch robbed pinch hitter Jedd Gyorko of at least an extra-base hit that would have put the Padres ahead and preserved Edward Mujica's 28th save in 30 chances. The Cardinals, who have won nine of 12 and have the majors' best record. The Padres have lost 19 of 24.
Wainwright matched his season high for walks after entering with a NL-low 15 in 146 2-3 innings, but is 3-1 in his two-walk games. He had only one perfect inning but got key outs with breaking balls and struck out Everth Cabrera with a man on third to end the seventh.
He entered with a 1.34 career ERA against the Padres.
The first four Cardinals reached safely in the third capped by Freese's two-run double when center fielder Alexi Amarista missed a diving catch and the ball went to the wall. Freese was thrown out at third on strong relays from right fielder Will Venable and Cabrera and the Cardinals had just one more runner in scoring position the rest of the way.
Matt Carpenter opened the third with a double off the base of the wall in right-center for his second straight hit and leads the majors with 39 multihit games.
Cabrera led off the game with an opposite-field double and scored on Alonso's two-out hit. The Padres cut the deficit to a run in the sixth on a double by Carlos Quentin, another Alonso hit and a double-play ball.
Notes: Thousands lined up outside Busch Stadium several hours before game time for Stan Musial replica statues and a near-sellout of 44,033 was the Cardinals' 14th straight of 43,000 or more. ... Carpenter leads the NL with 31 doubles. ... Carlos Beltran got a day off due to general soreness, although he told manager Mike Matheny he could play. ... The Cardinals have a day off before rookie Shelby Miller (9-6, 2.92) makes his first start after a 12-day break against the Phillies Tuesday. Andrew Cashner (5-5, 3.81) pitches for San Diego in the opener of a four-game set in Milwaukee. ... Padres OFs made a pair of outstanding plays. Venable's sliding catch left a long skid mark in foul territory in the fourth and LF Quentin snatched Craig's liner at shoetop level to end the seventh. ... Stults threw a season-high 124 pitches.
Link to box score: St. Louis 3, San Diego 2
Link to game discussion at The Cardinal Nation message board
David Freese comments on the win.