The Padres won a fifth consecutive series for the first time since the 2010 season and moved to within four games of .500 for the first time since April 16.
Freddy Galvis gave the Padres a 2-0 lead in the first on a two-out, two-run double, and the Padres added two runs in the top of the sixth. The Cardinals scored their two runs in the bottom of the sixth on a home run by Marcell Ozuna.
Lauer (3-4) allowed two runs on eight hits with two strikeouts in 5 2/3 innings to get credit for the win. He didn't walk a hitter for the first time in his 10 major league starts. But it was the Padres bullpen that again sealed the victory, retiring nine of the 10 Cardinals they faced, with that sole runner eliminated by a double play.
Rookie left-hander Jose Castillo followed Lauer and struck out all four Cardinals he faced. Right-hander Kirby Yates struck out one in a perfect eighth. And Brad Hand picked up his 21st save.
Weaver gave up all four Padres runs on nine hits and a walk with four strikeouts to fall to 3-6. Weaver has gone six straight starts without recording a win. Three St. Louis relievers retired the last 11 Padres.
Cory Spangenberg singled with one out in the Padres first and stole second. Christian Villanueva drew a two out walk, and both scored on Galvis' 12th double of the season.
Franmil Reyes doubled with one out in the Padres' sixth and scored on Manuel Margot's triple. Margot scored when Raffy Lopez greeted reliever Austin Gomber with an opposite-field bloop single to left.
Jose Martinez singled with one out in the sixth and scored on Ozuna's homer to straightaway center.
Margot had his second three-hit game of the season and made a diving catch of a Tommy Pham drive to right-center opening the eighth.
--Field Level Media