Я не знаю о sqlalchemy, но можно сгенерировать нужные результаты в одном запросе с использованием чистого sqlite, используя расширение JSON1 :
С учетом следующей таблицы и данных:
CREATE TABLE data(id INTEGER PRIMARY KEY, status TEXT);
INSERT INTO data(status) VALUES ('Assigned'),('In Progress'),('Peer Review'),('Ready to Publish')
,('Unassigned'),('Unassigned'),('Unassigned'),('Unassigned');
CREATE INDEX data_idx_status ON data(status);
этот запрос
WITH individuals AS (SELECT status, count(status) AS total FROM data GROUP BY status)
SELECT json_object('data'
, json_object('status_count'
, json_group_object(status, total)
, 'total_requests'
, (SELECT sum(total) FROM individuals)))
FROM individuals;
вернет удержание одной строки (после запуска через симпатичный принтер JSON; фактическая строка более компактна):
{
"data": {
"status_count": {
"Assigned": 1,
"In Progress": 1,
"Peer Review": 1,
"Ready to Publish": 1,
"Unassigned": 4
},
"total_requests": 8
}
}
Если используемый вами экземпляр sqlite не был создан с поддержкой JSON1:
SELECT status, count(status) AS total FROM data GROUP BY status;
даст
status total
-------------------- ----------
Assigned 1
In Progress 1
Peer Review 1
Ready to Publish 1
Unassigned 4
, который вы можете перебрать в python,вставляя каждую строку в ваш dict и добавляя все значения total
в другую переменную, вы получите значение total_requests
в конце.Нет необходимости в другом запросе только для вычисления этого числа;сделать это вручную.Могу поспорить, что действительно легко сделать то же самое с вашим существующим вторым запросом sqlachemy.