The Cardinals banged out 15 hits in the game and held on for their fourth consecutive win despite a four-run Houston ninth.
Adam Wainwright (12-5) banked the win, giving up one run on five hits and striking out nine. Wainwright has allowed one earned run in three of his last four starts.
Bud Norris (6-8) took the loss in a rough five-inning start. Norris allowed seven runs on 11 hits and Houston fell for the ninth time in their last 11 games.
St. Louis built a 7-0 in the first five innings but the Astros put four across in the ninth on two RBI singles and two RBI ground outs.