У меня есть запрос, который возвращает статус и количество. Например,
[ ('pending', 10), ('processing', 1), ('complete', 57) ]
Я хочу взять результат этого запроса и обновить таблицу со счетчиками. Но я не хочу запрашивать базу данных несколько раз. Я хотел бы выполнить эту операцию в одном запросе.
Возможно ли это? Есть ли способ заставить мой запрос подсчета возвращаться в одной строке?
Мой запрос подсчета:
query = db.session.query(
EnvelopeModel.status,
sa.func.count(EnvelopeModel.id)
).filter(
sa.or_(
EnvelopeModel.status.in_(['complete', 'pending']),
sa.and_(
EnvelopeModel.status == 'processing',
EnvelopeModel.id.in_(sa
.select([CallModel.envelope_id])
.where(CallModel.hold.is_(True))
.group_by(CallModel.envelope_id)
)
)
)
).group_by(EnvelopeModel.status)
Мой теоретический запрос на обновление:
update engagement set count_pending=X, count_processing=Y, count_complete=Z