The Cardinals snapped a two-game skid and need one more victory to become the first team in the majors with 40.
St. Louis pounded out 17 hits, six of which came while the Cardinals were sending 11 men to the plate in the fourth.
John Jay singled in the first run of the inning to snap a 2-2 tie and Allen Craig's bases-loaded single drove in two more. Craig then scored along with Matt Holliday on a homer to right by Adams and Descalso soon followed with a two-run blast.
St. Louis starter Shelby Miller (7-3) went six innings to get the win, giving up two runs on six hits with nine strikeouts. Miller also hit one of the five St. Louis home runs with a solo shot in the fifth.
Ian Kennedy (3-4) surrendered the eight runs in the fourth inning and 10 overall on 13 hits to take the loss. Arizona scored three times in both the seventh and ninth innings to reduce what had been a 10-run deficit.
Holliday contributed a two-run blast in the first inning and Matt Carpenter had a solo shot in the fifth.
The teams split a four-game series.