Gabriel Moreno hit his second career homer and first for the Diamondbacks, a three-run blast that capped a six-run fourth inning against the Cardinals' Jordan Montgomery, and Arizona held on to beat St. Louis 8-7 on Tuesday night.
Moreno was the sixth consecutive Diamondback to reach base to open the fourth and his 399-foot homer to center - the first allowed by Montgomery in 21 1/3 innings this season - made it 7-2.
Earlier in the inning, Jake McCarthy hit a grounder to first with two men on and the score tied 2-2, but the Cardinals botched a rundown and everyone was safe. Nick Ahmed then doubled in two runs, hitting a curveball that bounced in front of the plate.
Willson Contreras homered twice for the Cardinals, including a two-run shot off Andrew Chafin during St. Louis’ three-run ninth. Miguel Castro came in and got the last two outs for his first save.
Montgomery (2-2), who had been the Cardinals' most consistent starter, allowed seven runs on 10 hits in four innings as his ERA jumped from 2.45 to 4.84.
Kyle Nelson (3-0), the second of seven Arizona pitchers, worked 1 1/3 scoreless innings in relief of starter Drew Jameson, who gave up two runs in 3 2/3 innings.
Paul Goldschmidt homered in the first for the Cardinals, his seventh homer in 76 at-bats against his former team. He also doubled in the ninth.
Lourdes Gurriel Jr. had three hits for NL West-leading Arizona.
The 23-year-old Moreno was acquired in the offseason trade that sent outfielder Daulton Varsho for Toronto. He had one homer in 25 games for the Blue Jays last season.
The Cardinals were assured of their second losing homestand this year. They lost four of six to Toronto and Atlanta and now have dropped four of six to Pittsburgh and Arizona with the series set to conclude Wednesday.
Brendan Donovan was a late scratch with a left shin abrasion. Nolan Gorman moved from third base to second and Taylor Motter took over at third. 3B Nolan Arenado had the night off.
The Diamondbacks send Madison Bumgarner (0-2, 7.90 ERA) to the mound as they seek a three-game sweep. Jake Woodford (0-2, 5.65) starts for the Cardinals.