Yegor Sharangovich had two goals and an assist for the Flames (12-15-4), who have won three in a row on their four-game homestand and have gone 7-2-1 in their past 10.
Rasmus Andersson, Jonathan Huberdeau and Mikael Backlund also scored, Yan Kuznetsov had a goal and an assist, and Matt Coronato had two assists. Dustin Wolf made 25 saves.
Rasmus Dahlin had a goal and an assist for the Sabres (11-14-4), who have lost the first three games of their six-game road trip. Tage Thompson, Owen Power and Alex Tuch also scored, and Josh Norris and Jason Zucker had two assists each.
Ukko-Pekka Luukkonen made 17 saves through two periods before being replaced by Alex Lyon, who made four saves in relief.
Sharangovich gave the Flames a 1-0 lead at 9:54 of the first period when MacKenzie Weegar’s point shot went in off his arm.
Andersson extended the lead to 2-0 at 13:22 when he scored with one second left on a two-man advantage. Although Andersson’s stick broke when he took a shot from the point, the puck deflected off Buffalo defenseman Conor Timmins and past Luukkonen.
Thompson cut Calgary’s lead to 2-1 with a power-play goal at 4:24 of the second period when his wrist shot from the right circle beat Wolf to the blocker side.
Huberdeau put the Flames up 3-1 at 7:05 when he redirected a pass from Coronato past Luukkonen on the power play.
Power scored for Buffalo on a shot through traffic at 13:43 before Kadri tapped in a pass from Joel Farabee 31 seconds later to give Calgary a 4-2 lead.
After Dahlin redirected a pass from Josh Doan past Wolf at 16:32, Kuznetsov swatted in a rebound from the top of the crease 55 seconds later to put the Flames up 5-3.
With Lyon on the bench for the extra attacker, Tuch redirected Dahlin’s point shot past Wolf at 17:29 of the third period to once again pull the Sabres within a goal to make it 5-4.
Backlund and Sharangovich added empty-net goals at 18:12 and 19:53 for the 7-4 final.