Yadier Molina doubled home the winning run against All-Star closer Craig Kimbrel to give St. Louis a 3-2 victory over the Chicago Cubs on Wednesday night.
Adam Wainwright pitched seven strong innings for the Cardinals. Harrison Bader and Dylan Carlson each hit an RBI double in the seventh to put St. Louis ahead 2-1.
Bader also robbed Willson Contreras of an early two-run homer.
Chicago tied it in the ninth on pinch-hitter Eric Sogard's run-scoring double off Giovanny Gallegos.
Paul Goldschmidt started the bottom of the 10th as the automatic runner on second base. Nolan Arenado drew a walk from Kimbrel (1-3), who got the final out in the ninth for the Cubs. Molina then hit a drive to right field for a ground-rule double and his ninth career game-ending hit.
Anthony Rizzo began the top of the 10th on second and went to third on a single by Javier Baez that chased John Gant. But on a forceout at second, Rizzo stopped halfway down the line and was tagged out in a rundown for a double play.
T.J. McFarland (1-0) earned his first win with the Cardinals.
Bader, who went 3 for 4, has hit safely in 12 of his last 14 games while notching five multi-hit efforts in his last seven games.
Adbert Alzolay (4-9, 4.59 ERA) will make his 17th start of the season Thursday and second against St. Louis. He is 0-2 with a 2.45 ERA in three career starts against the Cardinals.
Kwang Hyun Kim (5-5, 2.87) has not allowed a run in 21 innings, the longest streak by a St. Louis pitcher this year. Kim, who has won four straight starts, went six innings to beat the Cubs 6-0 at Wrigley Field on July 10.