Sqlalchemy'de gruplama ve sayma işlevi


Yanıtlar:


166

Sayma üzerine belgeler için söylüyor group_bysorguları kullanımda daha iyidir func.count():

from sqlalchemy import func
session.query(Table.column, func.count(Table.column)).group_by(Table.column).all()

16
ve Table.queryyerine mülk kullananlar için tam açıklama session.query():Table.query.with_entities(Table.column, func.count(Table.column)).group_by(Table.column).all()
Jakub Kukul

2
@jkukul Bu kendi başına bir cevap olmalı - Alt sorgular yaparken bu sınırlamayı nasıl aşacağımı hep merak etmişimdir ve group_by ve count kullanmak istemiştim ..!
chris-sc

1
Bu cevaba yapılan düzenlemeler, ilk cümleyi anlamsız kılıyor. Neyden daha iyi ?
Mark Amery

33

Table.queryMülk kullanıyorsanız :

from sqlalchemy import func
Table.query.with_entities(Table.column, func.count(Table.column)).group_by(Table.column).all()

session.query()Yöntemi kullanıyorsanız (miniwark'ın cevabında belirtildiği gibi):

from sqlalchemy import func
session.query(Table.column, func.count(Table.column)).group_by(Table.column).all()

varlıklar için + bir
Espoir Murhabazi

28

Ayrıca birden fazla gruba ve bunların kesiştiği noktaya da güvenebilirsiniz:

self.session.query(func.count(Table.column1),Table.column1, Table.column2).group_by(Table.column1, Table.column2).all()

Yukarıdaki sorgu, her iki sütundan olası tüm değer kombinasyonları için sayıları döndürür.


Soru için teşekkürler, bunu düşünürken ilgili soruya cevap buldum. ;-)
fccoelho
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.