Tyler O'Neill hit a two-run double to end a no-hit bid started by Pittsburgh's Mitch Keller, and the St. Louis Cardinals rallied to beat the Pirates 5-4 Saturday night.

Keller threw 84 pitches over six no-hit innings and was pulled from the game leading 4-0, but the Cardinals scored five runs off relief pitchers Geoff Hartlieb and Sam Howard in the seventh. O’Neill broke up the no-hit bid and keyed the inning with his bases-loaded double against Howard (2-3).

More Images
St. Louis Cardinals relief pitcher Genesis Cabrera (92) celebrates with catcher Matt Wieters after getting the final out of a win over the Pittsburgh Pirates in a baseball game in Pittsburgh, Saturday, Sept. 19, 2020. (AP PhotoGene J. Puskar)

Tyler O'Neill hit a two-run double to end a no-hit bid started by Pittsburgh's Mitch Keller, and the St. Louis Cardinals rallied to beat the Pirates 5-4 Saturday night.

Pittsburgh Pirates relief pitcher Sam Howard, left, walks off the mound after handing the ball to manager Derek Shelton, second from left, during the seventh inning of the team's baseball game against the St. Louis Cardinals in Pittsburgh, Saturday, Sept. 19, 2020. (AP PhotoGene J. Puskar)

The 24-year-old Keller spun a gem in his second start since missing six weeks with a strained left oblique, but was pulled well short of finishing it off. He walked two and hit O’Neill with a pitch before retiring his final 14 batters, finishing with six strikeouts.

St. Louis Cardinals' Tommy Edman drives in a run with a single off Pittsburgh Pirates relief pitcher Sam Howard during the seventh inning of a baseball game in Pittsburgh, Saturday, Sept. 19, 2020. (AP PhotoGene J. Puskar)

After O’Neill got the Cardinals within 4-2, Dylan Carlson hit a sacrifice fly, and Kolten Wong and Tommy Edman delivered back-to-back RBI singles.

St. Louis Cardinals starting pitcher Kwang-Hyun Kim collects himself on the mound after giving up a solo home run to Pittsburgh Pirates' Jose Osuna during the the third inning of a baseball game in Pittsburgh, Saturday, Sept. 19, 2020. (AP PhotoGene J. Puskar)

The Pirates took a 2-0 lead on solo home runs by rookie Ke’Bryan Hayes in the first and Jose Osuna in the third.

Pittsburgh Pirates' Jose Osuna rounds third after hitting a solo home run off St. Louis Cardinals starting pitcher Kwang-Hyun Kim during the third inning of a baseball game in Pittsburgh, Saturday, Sept. 19, 2020. (AP PhotoGene J. Puskar)

TRAINER’S ROOM

St. Louis improved to 25-24 and is a game ahead of Cincinnati and Milwaukee for second place in the NL Central. The top two teams in each division advancing to the expanded postseason.

St. Louis Cardinals relief pitcher Genesis Cabrera (92) celebrates with catcher Matt Wieters after getting the final out of a win over the Pittsburgh Pirates in a baseball game in Pittsburgh, Saturday, Sept. 19, 2020. (AP PhotoGene J. Puskar)

St. Louis Cardinals relief pitcher Genesis Cabrera (92) celebrates with catcher Matt Wieters after getting the final out of a win over the Pittsburgh Pirates in a baseball game in Pittsburgh, Saturday, Sept. 19, 2020. (AP PhotoGene J. Puskar)

The 24-year-old Keller spun a gem in his second start since missing six weeks with a strained left oblique, but was pulled well short of finishing it off. He walked two and hit O’Neill with a pitch before retiring his final 14 batters, finishing with six strikeouts.

Hartlieb relieved in the seventh and promptly loaded the bases by walking Brad Miller and Paul DeJong and drilling Yadier Molina. Howard then came in and allowed O’Neill’s line drive into the left field corner.

Keller entered with a 1-1 record and 5.06 ERA in three games. He was activated from the injured list Monday after being sidelined since Aug. 2.

Pittsburgh Pirates relief pitcher Sam Howard, left, walks off the mound after handing the ball to manager Derek Shelton, second from left, during the seventh inning of the team's baseball game against the St. Louis Cardinals in Pittsburgh, Saturday, Sept. 19, 2020. (AP PhotoGene J. Puskar)

Pittsburgh Pirates relief pitcher Sam Howard, left, walks off the mound after handing the ball to manager Derek Shelton, second from left, during the seventh inning of the team's baseball game against the St. Louis Cardinals in Pittsburgh, Saturday, Sept. 19, 2020. (AP PhotoGene J. Puskar)

After O’Neill got the Cardinals within 4-2, Dylan Carlson hit a sacrifice fly, and Kolten Wong and Tommy Edman delivered back-to-back RBI singles.

The rally took Kwang Hyun Kim off the hook for the loss after he allowed four runs in 5 1/3 innings. Kim, in his rookie season with the Cardinals after 12 years in the Korea Baseball Organization, had made four consecutive starts in which he pitched at least five innings without allowing an earned run.

Jake Woodford (1-0) retired the last two batters in the sixth and was credited with his first major league win. Genesis Cabrera notched his first save of the season by getting the last five outs.

St. Louis Cardinals' Tommy Edman drives in a run with a single off Pittsburgh Pirates relief pitcher Sam Howard during the seventh inning of a baseball game in Pittsburgh, Saturday, Sept. 19, 2020. (AP PhotoGene J. Puskar)

St. Louis Cardinals' Tommy Edman drives in a run with a single off Pittsburgh Pirates relief pitcher Sam Howard during the seventh inning of a baseball game in Pittsburgh, Saturday, Sept. 19, 2020. (AP PhotoGene J. Puskar)

The Pirates took a 2-0 lead on solo home runs by rookie Ke’Bryan Hayes in the first and Jose Osuna in the third.

Pittsburgh chased Kim during a two-run sixth. Colin Moran hit an RBI single and Jacob Stallings had a sacrifice fly to make it 4-0.

The Pirates fell to 15-37, the worst record in the major leagues.

St. Louis Cardinals starting pitcher Kwang-Hyun Kim collects himself on the mound after giving up a solo home run to Pittsburgh Pirates' Jose Osuna during the the third inning of a baseball game in Pittsburgh, Saturday, Sept. 19, 2020. (AP PhotoGene J. Puskar)

St. Louis Cardinals starting pitcher Kwang-Hyun Kim collects himself on the mound after giving up a solo home run to Pittsburgh Pirates' Jose Osuna during the the third inning of a baseball game in Pittsburgh, Saturday, Sept. 19, 2020. (AP PhotoGene J. Puskar)

TRAINER’S ROOM

Cardinals: Molina (bruised left wrist) left the game after seven innings. He was hit by a bat in the left wrist Tuesday on a catcher's interference call and was struck again in what looked to be a similar spot by Harlieb's fastball. ... RHP Giovanny Gallegos (strained right groin) could be activated Monday for the opener of a three-game home series against Kansas City. He had a bullpen session and took fielding practice prior to the game. ... RF Dexter Fowler (non-injury reason) could also return early next week. ... A final decision has not been made on who will take the rotation spot of RHP Dakota Hudson (right elbow tightness). LHP Austin Gomber would be in line to pitch Tuesday.

Pirates: SS Kevin Newman was helped off the field after being hit in the lower left leg in the ninth inning by Cabrera.

Pittsburgh Pirates' Jose Osuna rounds third after hitting a solo home run off St. Louis Cardinals starting pitcher Kwang-Hyun Kim during the third inning of a baseball game in Pittsburgh, Saturday, Sept. 19, 2020. (AP PhotoGene J. Puskar)

Pittsburgh Pirates' Jose Osuna rounds third after hitting a solo home run off St. Louis Cardinals starting pitcher Kwang-Hyun Kim during the third inning of a baseball game in Pittsburgh, Saturday, Sept. 19, 2020. (AP PhotoGene J. Puskar)

UP NEXT

Cardinals: Jack Flaherty (3-2, 5.52 ERA) starts Sunday in the last game of the five-game series. He allowed a career-worst nine runs in three innings in his previous start Tuesday at Milwaukee.

Pirates: Joe Musgrove (0-5, 5.74 ERA) has yet to win in six starts this season, including his first opening-day assignment.

More AP MLB: https://apnews.com/MLB and https://twitter.com/AP_Sports