Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Запрос к БД, сгруппировать кол-во записей по дате [RSS Feed]

#1 Июнь 30, 2015 19:21:24

hdj
Зарегистрирован: 2014-11-19
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Запрос к БД, сгруппировать кол-во записей по дате

Добрый день, задача:
Из этой таблицы нужно получить список типа: arr(дата) = число записей. То есть найти количество записей для каждой даты.


То есть, чтобы список был такой:
arr(дата 1) = 3
arr(дата 2) = 4
arr(дата 3) = 2



Самый простой вариант, это получить список методом values_list('date', flat=True). И “руками” в цикле сделать счётчик:

for d in model.objects.filter(date__range=range).values_list('date', flat=True):
    arr[d] += 1

Но догадываюсь, что правильнее было бы через django ORM, подскажите, пожалуйста, как.

Отредактировано hdj (Июнь 30, 2015 19:29:06)

Прикреплённый файлы:
attachment рр.png (2,9 KБ)

Офлайн

#2 Июнь 30, 2015 21:46:54

lead-in
Зарегистрирован: 2014-10-13
Сообщения: 19
Репутация: +  5  -
Профиль   Отправить e-mail  

Запрос к БД, сгруппировать кол-во записей по дате

Можно так:

from django.db.models import Count
dict([(x['date'], x['id__count']) for x in model.objects.values('date').annotate(Count('id'))])

Но “ручками” тоже нормально, а читается даже лучше, ИМХО…

Офлайн

#3 Июль 1, 2015 17:29:48

inoks
От: Russia
Зарегистрирован: 2012-12-11
Сообщения: 343
Репутация: +  35  -
Профиль   Адрес электронной почты  

Запрос к БД, сгруппировать кол-во записей по дате

так а почему нельзя просто так сделать?

  qs = Item.objects.values('date').annotate(count=Count("id")).order_by()

https://docs.djangoproject.com/en/1.8/topics/db/aggregation/

Офлайн

#4 Июль 1, 2015 19:14:34

lead-in
Зарегистрирован: 2014-10-13
Сообщения: 19
Репутация: +  5  -
Профиль   Отправить e-mail  

Запрос к БД, сгруппировать кол-во записей по дате

так а почему нельзя просто так сделать?
Вы меня спрашиваете?) Так вы вроде тоже самое и написали, разве нет?
dict([(x, x) просто для перегона результата в словарь

Офлайн

#5 Июль 1, 2015 23:38:43

inoks
От: Russia
Зарегистрирован: 2012-12-11
Сообщения: 343
Репутация: +  35  -
Профиль   Адрес электронной почты  

Запрос к БД, сгруппировать кол-во записей по дате

lead-in
Так вы вроде тоже самое и написали, разве нет?
Ваш код без order_by() не будет работать так, как вы ожидаете.

Офлайн

#6 Июль 1, 2015 23:57:35

lead-in
Зарегистрирован: 2014-10-13
Сообщения: 19
Репутация: +  5  -
Профиль   Отправить e-mail  

Запрос к БД, сгруппировать кол-во записей по дате

Ваш код без order_by() не будет работать так, как вы ожидаете.

А можно узнать почему? Что даст сортировка для запроса вида:
select date, count(id) from "table_name" group by date

Офлайн

  • Начало
  • » Django
  • » Запрос к БД, сгруппировать кол-во записей по дате[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version