Wainwright was helped from the field by a trainer after injuring his left ankle while stumbling out of the batter's box on his popup to first leading off the fifth inning. He allowed three hits in four shutout innings.
The 29-year-old Harris then tossed 1 1/3 scoreless innings in his major league debut after serving five years of active duty in the U.S. Navy following his graduation from the Naval Academy.
Matt Holliday hit a three-run drive in the seventh for St. Louis, which has won four in a row. It was Holliday's first homer of the season.
The Brewers lost for the 10th time in 11 games to fall to 3-15. Every other team in the majors has at least six victories.
Holliday's 26th career homer against the Brewers put the Cardinals up 5-0. Matt Carpenter, who extended his hitting streak to 12 games with a fifth-inning single, doubled with one out in the seventh and Jason Heyward drew a walk.
Brewers manager Ron Roenicke was ejected during the pitching change to Jeremy Jeffress, whose first pitch was hammered over the wall in right-center by Holliday.
Wainwright will be re-evaluated when the Cardinals return to St. Louis. The Cardinals complete a six-game trip with a Sunday afternoon game at Miller Park.
Milwaukee right-hander Wily Peralta (0-3) allowed seven hits in six innings in his third consecutive loss. He struck out four and walked two.
Cardinals: RHP Lance Lynn (1-1, 1.56 ERA) has allowed one earned run in each of his three starts this season. He is 6-2 in his career against the Brewers, including 4-1 with a 1.85 ERA in six starts at Miller Park.
Brewers: Mike Fiers, who gave up two grand slams in his last outing, has yet to make a quality start in three outings. Fiers, who hit Marlins slugger Giancarlo Stanton in the face last September, is 0-3 this season with a 6.75 ERA and opponents are batting .333 against him.
Cardinals: C Yadier Molina, forced out of Friday's 3-0 win over the Brewers after being struck on the right knee guard by a foul tip, was out of the lineup. Tony Cruz started in place of Molina. ''We're still hopeful that we're talking a day or so. We'll adjust as we need to,'' manager Mike Matheny said.
Brewers: With starters Carlos Gomez (CF), Jonathan Lucroy (C) and Scooter Gennett (2B) all on the disabled list, Roenicke has been forced to mix-and-match, using 16 different lineups through the first 17 games. ''I guess what it tells you is that, if you're changing all the time, something's not working,'' Roenicke said.
UPON FURTHER REVIEW
The Brewers successfully challenged a call at first base in the sixth inning, negating what would have been the Cardinals' fourth double play. Pinch-hitter Elian Herrera opened with a walk and Jean Segura followed with a bouncer to second. Segura was originally called out on the end of 4-6-3 double play, but the call was overturned after a review estimated at 49 seconds. The Brewers are 4-0 in challenges this season.
Link to box score: St. Louis (12-4) 5 at Milwaukee (3-15) 3