ST. LOUIS -- Albert Pujols feels as good as he has in two years, and it shows.
"The last two months of this season has been the best that I've swung the bat since 2006," said Pujols, who is hitting .360. "Last year was a little up and down. I couldn't find myself at the plate, where I feel right now.
"The last six weeks, I'm driving the ball the other way. I feel great at the plate, seeing the ball better."
Felipe Lopez drove in two runs and made a run-saving play in left field for the Cardinals, who won for the second time in eight games and remained six games behind the Brewers in the NL wild card race. Milwaukee beat San Diego 1-0.
Pujols hit his 31st home run of the season in the first off Scott Olsen to give the Cardinals a 2-0 lead. He also scored the eventual winning run and made two impressive defensive plays, including scooping third baseman Troy Glaus' low throw to end the game.
St. Louis manager Tony La Russa said he has no doubt that Pujols, hitting .464 since August 15, should receive numerous postseason awards. The manager is lobbying for at least a Gold Glove and possibly the MVP award.
"If you love this game, you love excellence," La Russa said. "You love to watch him play. Don't take him for granted. It really is a treat."
Wellemeyer (12-6) gave up five hits and struck out seven against one of his former teams. He pitched 18 games and finished with a 5.48 earned run average as a reliever for the Marlins in 2006 before Kansas City picked him up off waivers that June.
The victory broke a personal two-game losing streak for Wellemeyer and gave him his second victory over the Marlins this year. He went 7 2/3 innings at Florida on August 14 in a 3-0 victory.
"We just couldn't get any runs," Marlins manager Fredi Gonzalez said. "Wellemeyer, you've got to give him a lot of credit.
"This is the first time I've seen him as a starter. He's got three pitches, he's got an above-average fastball and he commands. He was a bulldog on the mound."
Scott Olsen (6-10) lost his sixth straight decision and hasn't won since July 19 when he defeated Philadelphia. He went six innings on Saturday, gave up five hits and four runs.
Ryan Franklin got the final two outs to record his 15th save.
Dan Uggla homered for the Marlins, who fell 7½ games behind the Mets in the NL East. Florida was coming off its first back-to-back wins since July 30-31.
With the score tied at 3, Pujols drew a walk to start the sixth and took second on Ryan Ludwick's fly to deep right field, just beating the throw from Luis Gonzalez. He scored on a single to center by Yadier Molina.
"He's a good smart baseball player," Gonzalez said. "He did what I would do to if I was on base. My arm is not a secret to most teams. I'm a left fielder playing right. He did what he was supposed to do."
Pujols said he was focused more on the Cardinals' offensive struggles than Gonzalez's arm strength when he tagged up. In its last seven losses, St. Louis has been shut out twice and scored an average of 2.4 runs.
"Playing the game hard, that's it," he said. "I've done that a lot of times in my career."
The Cardinals added their fifth run in the eighth on Lopez's sacrifice fly to right field that scored Ludwick.
Josh Willingham hit a solo home run for Florida in the third and Uggla gave the Marlins a 3-2 lead with a two-run shot in the fourth. It was his 30th of the season, one off his career high.
The Cardinals tied the score at 3 in the fourth on a two-out single by Lopez. The play was set up when third baseman Jorge Cantu's throw pulled Uggla off the base on a potential double play that would have ended the inning.