Запрос SQLAlchemy подсчитывает все записи в базе данных в соответствии с месяцем [dубликат]

[F1]
13
задан gamp 3 September 2009 в 02:19
поделиться

3 ответа

, предполагая, что ваш db-движок поддерживает такие функции, как MONTH () , вы можете попробовать

  импортировать sqlalchemy как sa DBSession.query (статья) .group_by (sa.  func.year (Article.created), sa.func.month (Article.created)). all ()  

else вы можете сгруппировать в python, как

  from itertools import groupby def grouper (item): return item.created.year, item.created.month for ((год, месяц), элементы) в groupby (query_result, grouper): для элемента в элементах: # do stuff   
29
ответ дан Jochen Ritzel 15 August 2018 в 17:33
поделиться

Я знаю, что этот вопрос древний, но в интересах любого, кто ищет решения, вот еще одна стратегия для баз данных, которые не поддерживают такие функции, как MONTH ():

  db.session.  query (sa.func.count (Article.id)). \ group_by (sa.func.strftime ("% Y-% m-% d", Article.created)). all ()  

По существу это превращает метки времени в усеченные строки, которые затем можно сгруппировать.

Если вам нужны только самые последние записи, вы можете добавить, например:

  order_by (Article.created.desc ()). limit (7)  

Следуя этой стратегии, вы можете легко создавать группы, такие как день недели, просто опуская год и месяц.

3
ответ дан Matt 15 August 2018 в 17:33
поделиться

Ответ THC4k работает, но я просто хочу добавить, что query_result должен быть уже отсортирован, чтобы получить itertools.groupby , работая так, как вы хотите.

  query_result = DBSession.query (Article) .order_by (Article.created) .all ()  

Вот объяснение в itertools.groupby docs :

Операция groupby () аналогична фильтру uniq в Unix. Он генерирует разрыв или новую группу каждый раз, когда изменяется значение ключевой функции (поэтому, как правило, необходимо сортировать данные с использованием одной и той же ключевой функции). Это поведение отличается от SQL GROUP BY, которое объединяет общие элементы независимо от их порядка ввода.

9
ответ дан raben 15 August 2018 в 17:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: