Descalso hit a solo shot during the Cardinals' three-run first and Craig delivered what turned out to be the winning run with his homer in the third. Craig had an RBI single in the first and scored on a double by David Freese.
St. Louis was coasting along with a 4-0 lead, but the Astros sent eight men to the plate in the sixth and scored on singles by Brett Wallace, Brian Bogusevic and Jose Altuve.
Wainwright (5-6) gave up three runs on seven hits and struck out eight for the victory. Jason Motte recorded the final four outs for his 10th save.
Bud Norris (5-3) took the loss despite a 12-strikeout performance over six innings. He surrendered all four runs on seven hits.
'How to Train Your Dragon 2' releases 5-minute clip
Yosemite climber falls 30 feet, suffers major injuries