Adam Lind also homered for the Blue Jays. Morrow (5-5) allowed five hits, walked one and struck out eight before a crowd of only 12,392.
Morrow, who called it his best game, has consistently performed well since taking a little off his pitches.
"I'm kind of in that cruise mode," Morrow said. "I've been able to figure out an intensity level where I'm just kind of cruising. When I get into a little jam I can turn it up a little bit or dial it back down when you get out of trouble."
Blue Jays manager Cito Gaston said Morrow has the potential to become a staff ace.
"This kid is just going to get better all the time," Gaston said. "We're talking No. 1 or 2 starter one of these days as far as rotation. He's got that kind of stuff."
Wells also has been impressed by Morrow, who joined Toronto in an offseason trade with Seattle.
"When he's able to locate and throw strikes, he has as good as stuff as anybody," Wells said.
Wells hit a two-run homer to left field in the first inning and Lind followed with a drive to center, the seventh time Toronto has hit back-to-back homers.
Wells added a solo shot into the second deck in left in the third, his 18th. The Blue Jays lead the major leagues with 111 home runs.
Shawn Camp pitched the ninth for Toronto, which is 6-9 in interleague play.
Wainwright (10-5) allowed a season-high five runs, four earned, and six hits in four innings, his shortest start since Sept. 13, 2008.
"Just one of those days," Cardinals manager Tony La Russa said. "It doesn't happen very often but it happened today."
Wainwright said he won't struggle to shake off the bad outing.
"I don't make a habit of pitching games like that," he said. "I can put it out of my memory real fast."
The right-hander gave up three homers for the first time since May 12, 2008, at Milwaukee, when Ryan Braun hit two and Bill Hall added a third in an 8-3 Brewers victory.
Lind and Aaron Hill, who came in batting .207 and .187, respectively, were dropped in the order, with Gaston saying he wanted to take the pressure off the struggling pair. Hill was moved from second to sixth, while Lind went from third to fifth. Alex Gonzalez batted second and Jose Bautista third, ahead of Wells.
Lind went 2 for 4 and Hill was 1 for 4 before being replaced by pinch-runner John McDonald after an infield single in the seventh.
The Blue Jays jumped on Wainwright with a two-out rally in the first. Bautista singled and Wells homered on a 3-2 pitch. Lind followed with his ninth homer (also on a full count) and first since May 31 against Tampa Bay.
Wells made it 5-0 in the third with a one-out drive to left off Wainwright, his second multihomer game this season.
"I actually had pretty good stuff today," Wainwright said. "I just made some really, really bad pitches and they made me pay for it."
Cardinals slugger Matt Holliday came in 13 for 22 with 11 RBI in his previous five games. He went 1 for 3 with a double and a walk.
Home plate umpire Tony Randazzo was knocked down when he was struck in the collarbone by a pitch from Morrow in the eighth.
"I thought it hit him right in the throat," Morrow said. "I was just hoping he was all right."
Randazzo fell to the ground was treated on the field by Blue Jays trainer George Poulis and Blue Jays physician Dr. Ron Taylor. Randazzo got to his feet after several minutes and stayed in the game.
"I was fine," Randazzo said. "[Crew chief Brian Gorman] asked me a couple of times and the doctor said I was fine."
Randazzo said he had neck surgery two years ago after being struck by a foul ball. He was initially concerned that he had aggravated that injury, but was relieved that wasn't the case.Notes
- Cardinals OF Ryan Ludwick (sore left calf) missed his second straight game.
- Displaced by the G20 Summit, the Blue Jays open a three-game series in Philadelphia on Friday, with RHP Jesse Litsch (0-1, 6.75 ERA) facing former Toronto ace RHP Roy Halladay (8-6, 2.43) in the opener.