"I'm not trying to do too much," Rizzo said. "See the ball and hit it, really try to swing at the pitches I want to hit, not pitcher's pitches. Especially with Wainwright, his stuff is so good he's going to eat you alive."
Wainwright (5-2) had allowed six runs in 45 innings coming in, but the Cubs matched the runs total in just five innings against the St. Louis ace, who gave up 10 hits. His ERA rose from 1.20 to 2.16.
"They did a nice job of spoiling some pitches," Cubs manager Rick Renteria said of his batters. "You've got to give them all the credit. They grinded out some at-bats today and reaped some benefits."
Wainwright had been 6-0 in 12 previous starts and five relief appearances at Wrigley Field.
"There were certain pitches today I didn't have good command over," he said. "My curveball was kind of sporadic in the zone and out of the zone, which is pretty rare for me. It's a funny game. Today was not my day. I accept that and take responsibility for today and move on."
The scoreless streak was one inning shy of the career high for Wainwright, who had not allowed an extra-base hit since April 12 against the Cubs in St. Louis.
"He's been incredibly consistent through this season so far. ... You can see pitches were just on the edge and not where he wanted them or weren't getting called," Cardinals manager Mike Matheny said. "It's a frustrating day when he knows our guys put some offense up for him and we just can't stop them. He limited the damage and figured out ways to keep us in it. We had some chances."
Rizzo added a leadoff home run in the fifth that put Chicago ahead 6-3. Welington Castillo had three doubles for Chicago, which sent the skidding Cardinals to their 10th loss in 16 games.
Travis Wood (2-3) gave up three runs -- two earned -- and six hits in seven innings but allowed just one runner in his final three innings. Justin Grimm gave up Jhonny Peralta's two-run homer in the eighth, Hector Rondon pitched a perfect ninth for his second save.
Cubs centerfielder Ryan Sweeney made a catch on the run in the eighth on a drive to right-center by Allen Craig. Sweeney injured his right hamstring and was replaced by Emilio Bonifacio, who moved from second.
"It was great determination," Renteria said. "Hammys hurt."
St. Louis overcame its early deficit, tying the game in the third when Matt Carpenter singled in a run and scored on Peralta's double.
Chicago loaded the bases in the bottom half on a pair of walks around Starlin Castro's single. Ryan Sweeney drove in the go-ahead run with a weak grounder to second that allowed Rizzo to score from third, and Castillo followed with a two-out, two-run double.
Cubs GM Jed Hoyer said RHP Jose Veras (left oblique strain) will begin his rehab assignment at Double-A Tennessee and pitch at some point in the next few days, depending on how he feels. ... Cubs prospect OF Jorge Soler (hamstring) is progressing at the team's facility in Mesa, Ariz. Hoyer said "the reports have been good" and he hopes Soler will join Tennessee soon. ... RHP Jake Arrieta is to make his big league season debut for the Cubs when he starts Saturday. RHP Michael Wacha (2-2) is slated to slart for St. Louis.