Updated

Edinson Volquez settled down after giving up two early runs and tossed seven quality innings, as the Padres completed a three-game sweep of the Diamondbacks with a 5-4 victory at Chase Field.

Volquez (9-9) allowed four hits and two walks and did not yield a run after the first inning as San Diego won its seventh straight for the first time since an eight-game win streak in April 2010.

Yonder Alonso had two of the Padres' 11 hits and drove in a run, while Yasmani Grandal recorded a single, two walks, two runs scored and an RBI in the win.

Trevor Cahill took the hill for Arizona several hours after scheduled starter Joe Saunders was dealt to the Baltimore Orioles. Cahill (9-11), still pitching on four days' rest, was tagged for four runs on eight hits and three walks in just 3 2/3 innings.

Aaron Hill pulled the Diamondbacks within 5-4 with a two-run homer in the eighth, but the comeback came up short as the club fell to 2-5 on a 10-game homestand.

The Padres scored all of their runs with two outs, and it was a two-out rally in the third that broke a 2-2 tie. Grandal was plunked by a 1-2 sinker, moved into scoring position on an Alonso base hit and scored on Mark Kotsay's line drive single to right.

Volquez hit a base hit to lead off the next inning and eventually scored for a 4-2 lead when Carlos Quentin doubled down the left-field line.

Volquez retired seven in a row before putting the first runners on in the sixth, then got out of the jam thanks to Miguel Montero lining out sharply to left and Justin Upton getting doubled off second.

Alexi Amarista's RBI double in the seventh provided a much-needed insurance run because Hill took reliever Brad Brach over the left-field wall for a two- run homer in the eighth. Gerardo Parra singled leading off the frame.

Upton tried keeping the momentum in Arizona's favor but was robbed of a hit when Everth Cabrera made a diving stop to his right and threw to first to nab Upton by a step.

""That's a huge play, a momentum-changer," Padres manager Bud Black said.

The defensive gem proved pivotal, as the Diamondbacks put two runners in scoring position later in the inning, only to have Luke Gregerson strike out Chris Johnson on three pitches.

Gregerson stayed on for the ninth and set down the side in order to notch his first save since 2010.

Each team had a pair of two-out, run-scoring singles in the first inning. Grandal and Alonso both drove in runs for San Diego, while Montero and Chris Young answered with RBI hits in the bottom half.

"All the runs they scored were with two outs. You have to think you can put them away," Diamondbacks manager Kirk Gibson said.

Game Notes

San Diego's starters have posted a 1.88 ERA during their seven-game winning streak ... San Diego also earned a three-game sweep in Arizona in early July and leads the season series, 8-4 ... Cabrera was the only player in the Padres' starting lineup who did not record a hit ... J.J. Putz hurled a perfect ninth for Arizona. Both he and Gregerson have not allowed a run in their last 22 appearances ... Cahill went winless in five August starts ... The Diamondbacks acquired reliever Matt Lindstrom from the Orioles in exchange for Saunders.