У меня проблемы с запросом - с filter () все в порядке, но с exclude () не работает. Мои модели:
class Dictionary(DateTimeModel):
base_word = models.ForeignKey(BaseDictionary, related_name=_('dict_words'))
word = models.CharField(max_length=64)
version = models.ForeignKey(Version)
class FrequencyData(DateTimeModel):
word = models.ForeignKey(Dictionary, related_name=_('frequency_data'))
count = models.BigIntegerField(null=True, blank=True)
source = models.ForeignKey(Source, related_name=_('frequency_data'), null=True, blank=True)
user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name=_('frequency_data'))
user_ip_address = models.GenericIPAddressField(null=True, blank=True)
date_of_checking = models.DateTimeField(null=True, blank=True)
is_checked = models.BooleanField(default=False)
И я хочу взять несколько слов из словаря, где частоты не от какого-то пользователя
Dictionary.objects.prefetch_related('frequency_data').filter(frequency_data__user=1)[:100] - OK
Dictionary.objects.prefetch_related('frequency_data').exclude(frequency_data__user=1)[:100] - processor up to 100% and loading
Без prefetch_related то же самое. Что не так с exclude?
РЕДАКТИРОВАТЬ Таблица db словаря - 120 тыс. Строк FrequencyData - 160 тыс. Строк
РЕДАКТИРОВАТЬ2 psql (9.6.6)
Это то же самое - все еще ждем ... Таблица словаря содержит около 120k записей, а FrequencyData - 160k. Я проверяю с помощью filter () и count () - это было 120k - поэтому exclude должен показать 0
попробуйте qs=Dictionary.objects.prefetch_related('frequency_data').exclude(frequency_data__user=1).count(); print(qs.query), а затем в ./manage.py dbshell попробуйте выполнить результат печати.
Для этого запроса оболочка такая же, как и выше - зависает. Я пробую локально и получаю AttributeError: 'int' object has no attribute 'query' Затем я пробую локально: from django.db import connection qs=Dictionary.objects.prefetch_related('frequency_data').exclude(frequency_data__user=1).count() print(connection.queries) и мой результат: pastebin.com/ZMG0StN1
круто а зачем там 3 раза запрос?
Извините, я забыл reset_queries. Теперь только один: pastebin.com/ebfyHqdw
а запрос выполняется в 'time': '0.039' да?
Да, но на моем компьютере (локально). На сервере (виртуальном хостинге) зависает psql. Это странно. Это проблема с postgres?
попробуйте выполнить sql внутри plsql
Попробовал, зависает минут 15: / Локально работает нормально
простой count работает 15 мин? если да, сделайте EXPLAIN ANALYZE в psql для выбора и создайте новый вопрос с тегом postgres.
Хорошо, я сделаю это. Спасибо
попробуйте выбрать, указанный в комментарии к вашему новому вопросу





покажите пожалуйста
Dictionary.objects.prefetch_related('frequency_data').exclude(frequency_data__user=1).count()