Chris Capuano gave up just two runs in 6 1/3 innings and also doubled to lead the Brewers to a 4-3 victory Thursday that avoided a three-game sweep.
"To pitch to this lineup like he did and to hold them like that, that was good," manager Ned Yost said. "We needed to get on the board and we needed one of our starters to hold them and give us a chance, and he did just that."
Russell Branyan homered and Brady Clark had a two-run double for the Brewers, who won for only the third time in 13 games and defeated the Cardinals for the first time in six meetings this season. They also won for the first time this year when scoring fewer than six runs.
Reggie Sanders hit his fifth homer for the Cardinals, who lost for only the second time in 13 games. St. Louis has 14 victories this month, tying the 1963 Cardinals for most April wins in franchise history, and completed a 6-2 homestand.
The game, a makeup from a rainout on Monday, was delayed 1 hour, 16 minutes at the start by rain. It was played in 50-degree temperatures and drew a paid crowd of 26,026, although the turnstile count was 9,551, a season low in St. Louis.
Both teams lost days off on Thursday.
"It feels great, obviously," Clark said. "We've come up short against them, and especially having to stay here it's nice to get a victory."
Capuano (1-2) yielded five hits in his first victory since Aug. 8 at Florida. His double leading off the third was only the second hit in 39 at-bats by Brewers pitchers this season.
He didn't mind the conditions.
"I think pitching is the easiest position when it's cold and wet out there," Capuano said. "You get hot throwing before the game and you stay out there."
Jason Marquis (3-1), facing the Brewers for the second time in three outings, gave up four runs and five hits in seven innings. with a season-low two strikeouts.
"I had success with my cutter the last time around with them, and I think I might have overused it a little bit too much today," Marquis said. "I'm usually a guy who sticks to the game plan, and I got away from that."
Branyan hit his fifth homer leading off the second for the game's first run, and Capuano doubled in the third and scored on Geoff Jenkins' two-out single for a 2-0 lead. Sanders' first homer since April 13 came in the fourth, but Clark made it 4-1 in the fifth with a two-run double that followed a pair of walks.
Pinch-hitter Roger Cedeno's run-scoring infield single off Capuano's glove in the seventh cut the gap to 4-2. It scored Hector Luna, who doubled to start the inning when right fielder Geoff Jenkins barely missed making a diving catch.
St. Louis reliever Jimmy Journell kept it close in the eighth, working out of a bases-loaded, one-out jam when he struck out Damian Miller and retired Bill Hall on a liner.
The Cardinals cut it to 4-3 against Ricky Bottalico in the eighth on an infield hit by Scott Rolen, a checked-swing single by So Taguchi and a run-scoring groundout by Luna. Derrick Turnbow worked the ninth for his second save.
Albert Pujols, who beat an overshifted defense when he singled in the first through where the second baseman regularly plays, has reached base in 28 consecutive regular-season games dating to last season. But Pujols failed twice in RBI situations, striking out with runners on first and second to end the seventh and flying out with the tying run on first for the last out of the game. ... Brewers 1B Lyle Overbay did not start for the second game in a row after receiving 12 stitches to close a gash to his jaw on Tuesday. He entered as a defensive replacement in the eighth. ... Carlos Lee, who leads the Brewers with 14 RBI, is 0-for-23 against St. Louis pitching. He received an intentional walk in the eighth with runners at second and third and no outs. ... Rolen, who won his sixth Gold Glove at third base last season, has committed a fielding error in each of the last two games.