ST. LOUIS -- Wandy Rodriguez took a while to find a groove.
When the Houston Astros left-hander finally did, he was unstoppable.
Rodriguez (7-7) allowed just one earned run and five hits. He walked Matt Holliday with one out in the fourth before settling in. He got David Freese to hit into a double play to end the fourth, then pitched four perfect innings before Sergio Escalona and Mark Melancon finished up. Melancon got his tenth save in 13 opportunities.
"The first two or three innings, I didn't feel very comfortable on the mound," Rodriguez said. "Then I started to focus. When I focus on my game, I know what can happen."
Rodriguez threw first-pitch strikes to 22 of the 26 batters he faced. The Astros committed two errors allowing a pair of unearned runs in the second inning. But Rodriguez just appeared to get stronger as the game went along. He threw 116 pitches on a hot night. The temperature at the start of the game was 95 degrees.
"When they got a couple unearned runs against us, he didn't let that bother him," Houston manager Brad Mills said. "He kept coming. He worked through it. The last few starts, he's been right on."
St. Louis lefty Jaime Garcia (10-5), who entered the game with an NL-best home record of 6-1, gave up four earned runs in six innings.
"It was just a tough game," Garcia said. "I was battling. That fourth and fifth inning, they were kind of long. Things just didn't go my way."
Carlos Lee hit his tenth homer of the season in the sixth to give his team a 5-3 lead..
"I'm feeling pretty good," Lee said. "We're finally coming through at the plate."
Lee has three homers and nine RBI in his last seven games.
Michael Bourn extended his hitting streak to a career-best 13 games with two hits. He also walked twice.
Hunter Pence hit two doubles. Pence has been the subject of trade rumors and he reiterated after the game that he would like to stay with the Astros.
"I love these guys and I love Houston," Pence said. "That's all I know. I'm not really in control."
St. Louis first baseman Albert Pujols, who went 2 for 4, moved to within two hits of 2,000. He is aiming to become the 263rd player in history to hit that mark and the fifth St. Louis player to do so.
Houston scored twice in the fourth and once in the fifth to erase a 3-1 deficit. Lee doubled in Pence to cut the deficit to 3-2. Lee advanced to second and third on a wild pitch by Garcia and scored on a sacrifice fly to center by Chris Johnson.
The Astros capitalized on a throwing error by Freese at third to take the lead for good 4-3 in the fith. Rodriguez reached on the error and scored on Bourgeois' two-out double that bounced off the bag at third.
St. Louis, which lost for the third time in eight games, took a 3-1 lead in the third on back-to-back doubles by Jon Jay and Pujols.
"I give Houston credit," St. Louis manager Tony La Russa said. "They faced two of our best pitchers and they got two wins. That's why if you want to try and bet on baseball, you'll be a poor man."
Houston rookie second baseman Jose Altuve, who had hit safely in his first seven games, went 0 for 4, but drove in Bourn with a first-inning sacrifice fly.
St. Louis starters Gerald Laird and Nick Punto, along with Tony Cruz, who entered for Laird, all left the game early. Laird, the starting catcher, had a mild strain of the ring finger on his left hand while sliding at the plate in the second inning. Punto, who started at second base, strained his left oblique during his third-inning at-bat. Cruz got hit by a foul tip off the bat of Johnson in eighth.
St. Louis relievers Marc Rzepczynski and Octavio Dotel, acquired in a trade with Toronto on Wednesday, pitched well in their debuts. Rzepczynski struck out four in two innings. Dotel pitched a hitless ninth inning.
The Astros are 2-5 in a season-longest 10-game road trip that concludes with three games this weekend in Milwaukee. ... St. Louis OF Lance Berkman, who leads the NL with 27 home runs, missed his second game since straining his right shoulder on Tuesday. ... Punto batted in the leadoff spot for the eighth time this season. ...Ryan Theriot, who has led off 81 times, was moved to the No. 7 spot and is in an 0 for 14 skid.