Будет ли несколько func.count (). Filter () сканировать БД более одного раза? - PullRequest
0 голосов
/ 02 мая 2019

Я занимаюсь разработкой веб-приложения с использованием веб-платформы Pyramid. Я использую sqlalchemy для ORM и моделей. Я использую postgres для БД.

Вот мой запрос, чтобы получить различное количество заявок, поданных всеми пользователями:

counts = dbsession.query(
    func.count(Application.id).filter(Application.state == state1),
    func.count(Application.id).filter(Application.state == state2),
    func.count(Application.id).filter(Application.state == state3)).first()

Я сомневаюсь, будет ли это сканировать БД несколько раз, что нежелательно.

Вот сгенерированный sql:

 SELECT count(applications.id) 
 FILTER (WHERE applications.state = %(state_1)s) AS anon_1, count(applications.id) 
 FILTER (WHERE applications.state = %(state_2)s) AS anon_2, count(applications.id) 
 FILTER (WHERE applications.state = %(state_3)s) AS anon_3 
 FROM applications 
 LIMIT %(param_1)s

Заранее спасибо.

...