Molina's two-run shot in the first inning put the Cardinals ahead to stay and his run-scoring double two frames later put St. Louis up 3-1. The all-star catcher later added a sacrifice fly en route to the win.
Allen Craig went 3-for-5 with an RBI for the National League Central-leading Cardinals, who took the first contest in a four-game intrastate rivalry series.
Wainwright (7-3) coughed up 12 hits but held Kansas City to just three runs. The right-hander didn't issue a walk and struck out five.
Royals starter James Shields (2-6) allowed five walks, getting tagged for six runs on nine hits over six full frames.
David Lough went 4-for-5 with a run scored for Kansas City, which fell for the 10th time in 11 games.