ST. LOUIS -- Shelby Miller gave himself a boost with his bat.
"I haven't hit a home run since high school, at least in a game," said Miller, whose 1.91 ERA continues to lead the National League. "It was neat. It will be something I remember for sure. Sometimes you get lucky."
Miller (7-3) allowed two runs and six hits. He struck out nine and walked none.
Arizona scored three times in the ninth, and Edward Mujica got the last two outs for his 18th save in 18 chances.
Kennedy (3-4) was tagged for 10 runs and 13 hits in four innings.
Kennedy nearly escaped the fourth with giving up just one run, but his throw off on Yadier Molina's comebacker pulled shortstop Didi Gregorius wide of second base. What could have been an inning-ending double play instead led to Adams' three-run homer and Descalso's two-run shot.
"I think we've made that play and we expect to make that play," Arizona manager Kirk Gibson said. "It didn't happen today and it cost us."
Kennedy endured the entire inning and threw 50 pitches. He had 99 total, only 60 for strikes.
He said typically he'll ask his middle infielders which one will cover the bag in a situation like that before he makes a pitch. He failed to do so and when he saw second baseman Cliff Pennington break toward the bag his instinct was to throw it to him until Gregorius took charge.
By then, Kennedy double clutched and threw wide.
"That whole sequence. It was perfect," he said. "I was trying to get a double play in that situation. It would have been a lot different if I was able to turn. That's just my fault. I should have known who covered the bag just before that pitch."
The Cardinals hit five homers in a game for the first time since last July 27. The previous time they did it at home was June 24, 2005, at the former Busch Stadium.
David Freese extended his career-best hitting streak to 16 games for St. Louis. Descalso scored twice in the big fourth and finished with three hits, including a double.
The first five batters in the St. Louis starting lineup all got two hits, as did Miller.
Manager Mike Matheny liked what he saw from Miller at the plate. He hopes that the pitcher doesn't let it change his approach.
"You'll take any runs you can get, but we hope he doesn't go up there trying to do that every time," Matheny said.
The Cardinals greeted reliever Matt Reynolds with back-to-back home runs from Miller and Carpenter to open the fifth and stretch their lead to 12-2.
"I have a tendency of letting up in the first inning," Miller said. "I have got to figure out a way to be as aggressive like I am in the middle of the game and toward the end, in the first couple of innings. I just wasn't doing it early on."
Gerardo Parra had three hits, including an RBI single in a three-run seventh for Arizona. The Diamondbacks scored three more in the ninth when rookie Keith Butler gave up a hit to Pennington and a double to Wil Nieves before walking three consecutive batters.
Notes: The Cardinals have gone 9-0-3 in their past 12 series. ... Goldschmidt has an RBI in six consecutive games. ... Carpenter extended his career-best hitting streak to 15 games. Allen Craig has a 10-game streak. ... Miller was 2 for 25 in his career at the plate entering the game. He singled in the second for his first hit of the season. ... Cardinals LHP Kevin Siegrist came in the seventh to make his major league debut after being recalled from Triple-A Louisville earlier Thursday. He struck out four in 1 2-3 innings, allowing one hit.