It was a much-needed win for a D-backs team that has struggled so far this year to recapture the magic of 2011, when they led the Majors in come-from-behind wins and also played well in close games.
Arizona came into Thursday's game having dropped 11 of its last 14 games.
"That's the way we play," D-backs manager Kirk Gibson said of the way his team battled back. "That's what we're trying to get back to. It was a great team effort today, and it was the kind of game we needed. There was a lot of stress in it, a lot of competition."
It certainly wasn't a thing of beauty.
The two teams combined to walk 15, and though the Rockies allowed nine of those, it was Arizona reliever David Hernandez who forced in two runs with a pair of walks.
"Everything possible that was bad about baseball was out there today at some point in time," Colorado shortstop Troy Tulowitzki said.
Pretty or not, the D-backs were glad to walk away with the win, as they evened their record for the road trip at 2-2 with three games left in Kansas City this weekend.
"These are the types of games where we have to grind, put together some singles, get the big hit, that's how you build confidence," Upton said. "The blowouts don't build as much confidence as the close games do, so it's good to have a few of these."
The D-backs trailed 4-3 before scoring four runs in the top of the eighth inning off of a pair of Rockies relievers.
"We can't pitch any worse than that," Rockies manager Jim Tracy said. "It's just that simple."
A 7-4 lead with normally reliable setup man David Hernandez on the mound to start the eighth seemed to be an ideal situation for the D-backs.
It didn't work out that way, though, as Hernandez was uncharacteristically wild. The right-hander issued three walks in the inning, two of which forced in runs, and was unable to pitch around a costly error by third baseman Ryan Roberts. Had Roberts been able to handle Michael Cuddyer's grounder cleanly, the Rockies would have only scored one run in the inning.
Instead, they scored three and looked poised to score more, as they had the bases loaded with two outs. Gibson elected to bring in Brad Ziegler at that point to face pinch-hitter Wilin Rosario.
Standing in right field, Upton recalled that Rosario hit a ball to him on Wednesday night with Ziegler on the mound.
"For some reason I remembered what he did [on Wednesday], and I was ready for him to drive the ball that way," Upton said. "He's usually more of a pull hitter, and he [went the other way] against Ziegler last night, so I kind of figured that was his approach."
Upton got a good jump on the line drive and was able to make a nice play on it for the third out of the inning.
Then in the top of the ninth against Betancourt, Gerardo Parra doubled with one out and stole third. After Willie Bloomquist struck out, Upton came through with the homer.
It's been a struggle this year for Upton, who started off slowly due to an injured thumb. The two-time All-Star came into Thursday's game hitting just .221 with three homers and 10 RBIs.
"You know that's when he's getting where he needs to go," Gibson said of Upton hitting the ball the other way. "He's had a good attitude through the whole thing, he's worked hard and he was rewarded today. A big hit for us."
That gave Arizona the 9-7 lead, but closer J.J. Putz still needed to get three outs to wrap things up.
In keeping with the theme of the day, it wasn't easy.
Putz allowed three straight hits to start the inning and with the bases loaded. With his bench already emptied, Tracy was forced to have pitcher Alex White hit for Betancourt. Putz was able to strike White out looking and Ramon Hernandez than hit a chopper to Roberts, who threw to second to start a game-ending double play.
"It's not the way you draw it up, but I made a big pitch when I needed to, and Ryno did a great job sticking with that," Putz said. "After what happened the inning before that shows a lot of character in Ryno right there to bounce back."