Lohse (2-0) surrendered his first two runs of the season, but pitched well enough to help the Cardinals win for the eighth time in 10 games.
Lohse gave up eight hits over 5 1-3 innings, with two strikeouts and a walk. He opened the season with 15 consecutive scoreless innings, a streak that ended when Rich Aurilia and Brian Bocock each drove in a run in the fourth.
Pujols gave the Cardinals a 1-0 lead with an RBI double in the third.
His third home run of the season, a no-doubter off Barry Zito that he admired for a few seconds before trotting around the bases, put the Cardinals ahead 4-2 in the fifth. Ray Durham's fielding error on Skip Schumaker's grounder extended the inning for Pujols.
Zito (0-3) gave up four runs - only one earned - on seven hits over six innings in his best start of the season. He walked one and struck out two as the Giants saw their three-game winning streak come to an end.
The 2002 AL Cy Young Award winner, Zito has never gotten on track since signing a $126 million, seven-year contract with the Giants before last season. He hasn't won a game since beating the Los Angeles Dodgers last Sept. 30.
Not that he's gotten much help: The Giants had been shut out in his first two starts, a 5-0 loss on opening day to the Dodgers and a 7-0 loss to the Milwaukee Brewers last Sunday. San Francisco also gave up two unearned runs in that one.
Schumaker and Brian Barton each threw runners out at the plate, neither of them particularly close. It was Barton's first major league assist.
Schumaker reached base in all five plate appearances, getting three hits and reaching on fielding errors twice. He scored four runs.
Barton doubled in two runs in the eighth to make it 7-2, and Ryan Ludwick added a solo homer in the ninth.