The win kept the Cardinals 2 1/2 games ahead of a surging Pittsburgh team that has won seven of its last eight games.
Wainwright settled in after a rocky start.
The Cardinals' ace stranded five and needed 43 pitches to get through the first three innings. Wainwright needed just 53 pitches to get through the next five and retired the last 16 batters he faced before giving way to Trevor Rosenthal in the ninth.
"Just getting that first guy out is huge," Wainwright said. "They had some ducks on the pond early in the game that we had to pitch around. Other than that, I just continued to believe I was going to execute pitches and my defense made some great pays behind me. I was executing, the defense was playing great. It's a great combo."
Wainwright gave up one run on six hits over eight innings. He walked none and struck out eight while improving to 18-9 on the season.
Perhaps more importantly for the Cardinals is further confirmation that Wainwright has returned to form. After struggling to a 2-4 record and a 5.17 ERA in August, Wainwright has been dominant in his last two starts. His performance Friday followed up a 100-pitch complete-game win at Milwaukee on Sept. 7.
"There's nothing that you can necessarily see from the side," Cardinals manager Mike Matheny said. "It's a feel. That's what the great pitchers do. They get a feel for all of their pitches, and it's so small as far as how the execution goes. That's just him trusting his stuff and being able to expand the zone, being able to sense when a guy's sitting on his breaking ball and being able to throw it short of the plate and being able to run the cutter a little further. It's incremental changes that you can't see from the side, but when he feels it, it's pretty obvious."
Wainwright wasn't focusing on trying to be the so-called stopper.
"I pay no attention to that," Wainwright said. "All I know is that when I go out and pitch every fifth day, I consider myself and expect to be the best pitcher in the league. It's just the way I'm going to get the most out of my ability. I don't throw 106 [mph]. I don't throw nasty stuff that moves a foot and a half all over the place. I do things in my own way, I think, and I have great confidence in my ability, however little it is."
Matt Holliday's rocket shot into Big Mac Land gave the Cardinals a 3-0 lead in first. The 467-foot blast, Holliday's 17th home run of the season, was the second-longest homer in Busch Stadium III history. Holliday holds the honor for the longest home run in the Cardinals' home park, a 469-foot shot against the Cubs on July 20, 2012.
"That's probably one of the better ones I've hit in my career," Holliday said. "I don't know what the distance of my others ones are, but I hit that about as good as I could hit one."
"I thought it was still going up when it hit Big Mac Land," Matheny said. "He hit that as hard as any ball I've seen hit in a long, long time."
Colorado manager Walt Weiss has seen that from Holliday, a former Rockie, before. "One pitch, Holliday," Weiss said. "Mistakes tend to go far with that guy. We've seen him when he was with us. He's been a very powerful hitter in this league for a while."
After not cashing in on leadoff hits the first two innings, the Rockies finally broke through in the third on a two-out RBI double from Nolan Arenado to cut it to 3-1.
Holliday used his legs to get that run back in the bottom of the third. After reaching on a two-out error, Holliday stole second and scored on a Jhonny Peralta single to make it 4-1 Cardinals.
"That's a big run right there, a big run," Matheny said. "Jhonny getting the big two-out hit for us, but Matt being conscientious on the bases and not just being satisfied with hitting a three-run homer and realizing we needed more. I thought he did a good job of getting a good jump and it ended up being a run that gave Adam a little more room to breathe."
Colorado starter Jorge De La Rosa took the loss. He went six innings and gave up four runs, three of which were earned, to fall to 13-11.
Rockies first baseman Justin Morneau was removed from the game with left intercostal soreness in the sixth inning. He is day to day.
St. Louis tacked on another in the eight when a Yadier Molina double scored Randal Grichuk.
Rosenthal, pitching for the first time in five days, allowed two infield singles and struck out two to end the game.
"This is where we want to be," Holliday said. "We've got a lead and we're ahead in the division. We've got a nine-game homestand. This is where we want to be. This is what you play for. You play for an opportunity to win a World Series and the opportunity is in front of us."