Peewee - Counting and Aggregation



We can find number of records reported in any SELECT query by attaching count() method. For example, following statement returns number of rows in Contacts table with City=Nasik.

qry=Contacts.select().where (Contacts.City=='Nasik').count()
print (qry)

Example - Usage of Group By Clause

SQL has GROUP BY clause in SELECT query. Peewee supports it in the form of group_by() method. Following code returns city wise count of names in Contacts table.

main.py

from peewee import *

db = SqliteDatabase('mydatabase.db')

class BaseModel(Model):
   class Meta:
      database = db
	  
class Contacts(BaseModel):
   RollNo = IntegerField()
   Name = TextField()
   City = TextField()
   class Meta:
      database = db

qry=Contacts.select(Contacts.City, fn.Count(Contacts.City).alias('count')).group_by(Contacts.City)
print (qry.sql())
for q in qry:
   print (q.City, q.count)
   
db.close()

Output

The SELECT query emitted by Peewee will be as follows −

('SELECT "t1"."City", Count("t1"."City") AS "count" FROM "contacts" AS "t1" GROUP BY "t1"."City"', [])

As per sample data in Contacts table, following output is displayed −

Chennai 1
Delhi 2
Indore 1
Mumbai 1
Nagpur 1
Nasik 3
Pune 1
Advertisements