Troops surrounded the building and an operation was underway to rescue children still trapped inside, the army said.
Hours into the siege, three explosions were heard inside the military-run high school and a Reuters journalist at the scene said he heard heavy gunfire.
Outside, as helicopters rumbled overhead, police struggled to hold back distraught parents who were trying to break past a security cordon and get into the school.
Bahramand Khan, director of information for the regional Chief Minister’s Secretariat, said at least 126 people were killed and 122 wounded.
“It may rise,” he said, adding that more than 100 of the dead were school children. A local hospital said the dead and wounded it had seen were aged between 10 and 20 years old.
The hardline Islamist Taliban movement immediately claimed responsibility.
“We selected the army’s school for the attack because the government is targeting our families and females,” said Taliban spokesperson Muhammad Umar Khorasani. “We want them to feel the pain.”
Hostages still being held
It was not clear whether some or all of the children were killed by gunmen, suicide bombs or in the ensuing battle with Pakistani security forces trying to gain control of the building.
An unspecified number of children were still being held hostage in the school, a provincial official said, speaking some three hours after the siege began.
The Pakistani Taliban, who are fighting to topple the government and set up a strict Islamic state, have vowed to step up attacks in response to a major army operation against the insurgents in the tribal areas.
They have targeted security forces, checkpoints, military bases and airports, but attacks on civilian targets with no logistical significance are relatively rare.
In September, 2013, dozens of people, including many children, were killed in an attack on a church, also in Peshawar, a sprawling and violent city near the Afghan border.
With the rescue operation under way, the situation remained fluid, with contradictory reports about what was happening inside the school and witness accounts difficult to come by.
“An army doctor was visiting us teaching us about first aid when attackers came from behind our school and started firing,” one student told Pakistan’s Dunya Television.
“Our teachers locked the door and we ducked on the floor, but they [militants] broke down the door. Initially they fired in the air and later started killing the students, but left the hall suddenly.
“The attackers had long beards, wore shalwar kameez [traditional baggy clothes] and spoke Arabic.”
The army said five Taliban militants had been killed and that they were searching for any remaining gunmen. The Taliban had earlier said they had sent six insurgents with suicide vests to attack the school.
Prime Minister Nawaz Sharif condemned the attack and said he was on his way to Peshawar.
“I can’t stay back in Islamabad. This is a national tragedy unleashed by savages. These were my kids,” he said in a statement.
“This is my loss. This is the nation’s loss. I am leaving for Peshawar now and I will supervise this operation myself.”
Military officials at the scene said at least six armed men had entered the military-run Army Public School. About 500 students and teachers were believed to be inside.
“We were standing outside the school and firing suddenly started and there was chaos everywhere and the screams of children and teachers,” said Jamshed Khan, a school bus driver. – Reuters