Yadier Molina homered and drove in four runs to help St. Louis beat the slumping Royals 6-3 on Monday.
"We'll take three or four runs with James Shields pitching any day," said Eric Hosmer, who had an RBI for Kansas City. "We'll take the positives from it, but at the same time we want to win. Stuff is not going our way. We'll keep plugging along and things will go our way."
While the Cardinals own the best road record in the majors at 19-9, the Royals dropped their ninth straight home game - one shy of the franchise record set last year.
The anticipated pitchers' duel between Shields and Wainwright failed to materialize.
Wainwright (7-3) struck out five and walked none in eight innings for the win. But he allowed 12 hits, his most since Sept. 14, 2010, against the Chicago Cubs. The right-hander gave up 12 hits over 22 1-3 innings in his previous three starts.
"I thought we did pretty good against a pretty darn good pitcher," Royals manager Ned Yost said. "Up until the eighth I thought we would get a big hit and get some runs across. We had him on the ropes and couldn't get the big hit."
Shields (2-6) yielded nine hits and season highs of six runs and five walks over six innings while losing his fourth straight start. The Royals totaled five runs in his previous four starts.
"I don't care about run support," Shields said. "I care about my pitching. Guys swung the bats well today. We had a bunch of singles today and moved the runners. I didn't do my job and it resulted in an `L'."
While Shields has a 2.96 ERA and leads the club with 73 strikeouts and 79 innings, victories have been hard to come by.
"I thought he really competed," Yost said. "He was fighting his command all day long and I thought he did a good job against a pretty good offensive ballclub."
Molina hit a two-run homer in the first inning and doubled home a run in the third before his sacrifice fly in the fourth scored Pete Kozma.
Edward Mujica gave up a hit in the ninth but earned his 15th save in as many opportunities.
After rain delayed the start for 62 minutes, the Cardinals opened the game with Matt Carpenter's single and Molina's third home run.
"I wasn't commanding my fastball and I was getting behind in the count and then I started walking guys," Shields said. "We've just got to gut it out. We've got great effort in here."
Royals rookie David Lough, who had a career-high four hits, led off the first with a double and scored on Alex Gordon's single.
Molina's double in the third scored Daniel Descalso. Molina scored on Allen Craig's single.
The Royals answered with two runs in the bottom half. Gordon scored on a wild pitch and Hosmer had an RBI single.
The Cardinals expanded their lead in the sixth when Carpenter's double scored Descalso, who had three hits and a walk.
NOTES: Hosmer's RBI was his first since May 19 at Oakland. ... LHP Bruce Chen lowered his ERA to 1.56 with two scoreless innings. ... DH Billy Butler went 2 for 4 and his next hit will be the 1,000th of his career. ... 3B Mike Moustakas was held out of the Royals' lineup with a bruised quadriceps, but was available if needed. Miguel Tejada started at third. ... Every Royals starter besides 2B Elliot Johnson had a hit.