Randal Grichuk got the game winning hit to save Opening Day in St. Louis.
His bases-loaded, two-out blast to the base of the left-field wall knocked home Jose Martinez in the bottom of the ninth inning to give the Cardinals a 4-3 victory over the defending World Series champion Chicago Cubs.
It was Grichuk's second career walk off hit. His last was on May 23, 2016, also against the Cubs.
The Cardinals looked to have the game in hand in the eighth, when Grichuk hit a two-run home run to pad a 1-0 lead. But Chicago catcher Wilson Contreras tied the game off Cardinals closer Seung Hwan Oh in the top of the ninth with a three-run blast.
The home run spoiled a solid outing for Cardinals' starter Carlos Martinez, who blanked the Cubs through 7 1/3 innings, striking out 10 and walking none. After getting out of an erratic first inning with a double play, Martinez allowed just two Chicago base runners through the next six innings.
Martinez started the Cardinals' ninth-inning rally with a one out double. Yadier Molina, who started the day's festivities by signing a three-year contract extension, and Kolten Wong were walked to load the bases for Grichuk's game winner.
Oh (1-0) got the win, allowing three earned runs on two hits with two strike outs and two hit batters.
Mike Montgomery (0-1) took the loss for Chicago.
The Cardinals took the early lead on a sacrifice fly by Chris Carpenter, who started at first base and batted in the No. 3 spot. They held that lead into the eighth, stranding 11 base runners along the way.
They knocked out Cubs starter Jon Lester in the sixth after he had thrown 102 pitches. Lester struck out seven, but allowed seven hits and walked two.
Pedro Strop, Chicago's fourth pitcher of the night, walked Piscotty to start the eighth, then dished up the home run to Grichuk to make it 3-0.
In the top of the ninth, Oh hit Ben Zobrist to lead off the inning. Then, with one out, former Cardinal Jason Heyward hit a sharp grounder to Carpenter, who tried to throw to second ahead of the lead runner. He struggled with the exchange and, with the hesitation, allowed Heyward to beat him to the bag with a head-first slide into first.
Instead of the game ending on a double play, The Cubs had the tying run at the plate with one out. Contreras hit a 1-2 pitch from Oh on a line into the left field stands, just under the Big Mac Land sign, to tie the game and take the win away from Martinez and set up the dramatics in the bottom of the inning.
Molina finished the day 2-for-3 with a walk. Grichuk was 2-for-4 with a walk, a run scored and three RBIs. Dexter Fowler had a single and scored; Aledmys Diaz was 2-for-5 with a double and two stolen bases; Jhonny Peralta singled; Piscotty singled, walked twice and scored a run.
Chicago had eight hits, including three in a scoreless eighth inning. Kyle Schwarber was 3-for-4.