St. Louis turned a triple play early in the contest, but it did not keep the Padres from winning their fourth straight.
Brian Lawrence allowed three runs on seven hits in 6 2/3 for the Padres, but the win went to Chris Hammond (3-0). Hammond turned in 1 1/3 scoreless innings.
The Cardinals' Albert Pujols extended his hitting streak to 16 games.
San Diego broke a 3-3 tie in the eighth against reliever Ray King (1-1) on RBI singles from Jesse Garcia and Phil Nevin.
The St. Louis triple play came in the second when, with runners on first and second, Ramon Hernandez hit a line drive that Pujols caught at first.
He stepped on first base to double off one runner and quickly threw to second before the runner there could get back to the bag.