ST. LOUIS -- For the second straight night, the Kansas City Royals leaned on the long ball to reward their starting pitcher. This time, Brian Bannister was the beneficiary.
David DeJesus and Alex Gordon homered for the tying and go-ahead runs in the eighth inning Wednesday, helping Bannister and the Royals beat the St. Louis Cardinals 3-2.
In the series opener, Mike Aviles' eighth-inning homer made a winner out of Kyle Davies.
"It's a pretty good formula," Bannister said. "I think we can get used to it."
Last in the AL Central, the Royals improved to 6-2 in interleague play and will try for a three-game sweep of their cross-state opponent Thursday. Kansas City had been 0-37 this season when trailing after seven innings.
"We've got another game tomorrow, so I don't want to be popping off," Royals manager Trey Hillman said. "We've got a long ways to come back."
The Cardinals had won eight series and split one since losing two of three to Pittsburgh in mid-May. To salvage a game against the Royals, they've lined up a replacement for replacement starter Anthony Reyes, placed on the 15-day disabled list with elbow irritation.
Brad Thompson will be activated from the DL, where he's been since April 23 with an elbow injury.
Braden Looper held the Royals scoreless on two hits until John Buck had an RBI single in the seventh. Reliever Kyle McClellan (0-2) had allowed only two home runs in 35 2/3 innings when he took over in the eighth with a 2-1 lead.
DeJesus hit his eighth homer with one out. Gordon connected off the rookie right-hander with two outs for his eighth homer.
DeJesus is 8-for-18 with eight RBI with three homers in the last four games, while Gordon has three homers in eight games after going without a long ball for 107 at-bats.
Ron Mahay struck out Rick Ankiel and got Troy Glaus to ground out with two men on to end the eighth. Joakim Soria worked a perfect ninth for his 17th save in 18 opportunities.
Bannister (6-6) won for the first time in 11 tries while starting a night game, allowing two runs and nine hits in seven innings. He had been 0-7 overall since beating Detroit under the lights last Aug. 28.
"It's good to get all that stuff out of the way," Bannister said. "I feel like I've thrown some good games and some bad games, and I just chalk it up to the hitters."
Looper, working on an extra day of rest, ran his string of scoreless innings to 17 before the seventh. He threw a three-hit shutout at Cincinnati in his last start.
Skip Schumaker had two hits for the Cardinals, and is batting an NL-best .396 this month. But St. Louis has scored three or fewer runs five times while going 3-4 without injured star Albert Pujols.
"I'm not going to make any excuses," manager Tony La Russa said. "Other teams have guys hurt. Part of dealing with it is not talking about it and not giving in to it."
The Cardinals took the lead after Bannister's first four pitches -- Schumaker and Aaron Miles singled and Ryan Ludwick had a sacrifice fly. Three more singles, the last an infield hit by Jason LaRue that deflected off Bannister, made it 2-0 in the fourth.
St. Louis missed a chance for more in the sixth when Ludwick's routine fly to center field fell 10 feet in front of DeJesus, who had lost track of the ball, for a leadoff double. Left fielder Jose Guillen made a perfect one-hop throw to third on Ankiel's flyout to the warning track, nailing Ludwick trying to advance.
"I went back and ... nothing," DeJesus said. "Guillen picked me up and that's what teammates do."
Looper retired 10 in a row after hitting DeJesus with two outs in the third, a streak ended by Gordon's double leading off the seventh. The Royals caught a break when second baseman Adam Kennedy barehanded Mark Teahen's two-out roller and then mishandled the ball before throwing late to first on a play ruled an infield hit, and Buck followed with an RBI single.
Looper has hit six batters this season after plunking DeJesus in the third. He totaled four last year. ... The Cardinals presented Hall of Famer Lou Brock, celebrating his 69th birthday, with a cake after the top of the fourth. ... Guillen was 0-for-4, ending an 11-game hitting streak in which he batted .500 (23-for-46).