@pydjango

Страница 509 из 1273
Igor
31.08.2017
09:38:06
Спасибо), а как еще этот коунт отфильтровывать по статусу?

Hot
31.08.2017
09:48:12
Ребятки, у меня тут Django ORM дичайше бесоёбит.

Вот скажите мне, filter и count - это read-only операции?

Dan
31.08.2017
09:48:35
что делает ?

Google
Hot
31.08.2017
09:48:40
Они состояние БД как-то могут поменять?

Беосёбит её.

Дичайше.

Dan
31.08.2017
09:48:48
нет

Hot
31.08.2017
09:48:57
Она на одни и те же запросы возвращает то, что хочет.

Dan
31.08.2017
09:49:09
не может быть такого

Hot
31.08.2017
09:49:09
Причём SQL-код один и тот же.

И из консоли БД показывает один и тот же результат.

Я бы сам не поверил.

Dan
31.08.2017
09:50:55
показывай ORM конструкцию

и между чем и чем разница разница ?

Hot
31.08.2017
09:51:59
Между результатом запроса и результатом этого же запроса xD

Причём у меня тут не один такой запрос xD

Google
Hot
31.08.2017
09:52:30
In [135]: Group.objects.filter(from_1c=False).count() Out[135]: 244500 In [136]: Group.objects.filter(from_1c=False).count() Out[136]: 259

Вот пример.

Это из свежего xD

Но это не всё!

Denis
31.08.2017
09:53:02
База менялась между запросами

Hot
31.08.2017
09:53:06
Давайте я покажу чуть расширенную версию!

In [134]: Product.objects.filter(groups__not_in=Group.objects.filter(from_1c=False)).count() Out[134]: 244500 In [135]: Group.objects.filter(from_1c=False).count() Out[135]: 244500 In [136]: Group.objects.filter(from_1c=False).count() Out[136]: 259

Прикол в том, что процессов, которые могли бы её менять - нет.

Denis
31.08.2017
09:53:44
Не надо так писать

Hot
31.08.2017
09:53:47
А прямой запрос в консоль MySQL в своих результатах однозначен.

Denis
31.08.2017
09:54:24
Product.objects.exclude(groups__from_1c=False) попробуй

Hot
31.08.2017
09:55:15
In [79]: Product.objects.exclude(groups__from_1c=False).count() Out[79]: 237565 In [80]: Product.objects.exclude(groups__from_1c=False).count() Out[80]: 237565

No comments guys.

Denis
31.08.2017
09:55:50
in с нетривиальными выражениями опасно делать

Теперь глянь sql и убедись, что это то, что надо

Hot
31.08.2017
09:57:44
Запросы разные xD

SQL-код всмысле.

Ну, я его немножко переписал, потому что от count() мне query не получить.

mysql> SELECT COUNT(*) FROM `catalog_product` WHERE NOT (`catalog_product`.`code` IN (SELECT U1.`product_id` AS Col1 FROM `processor_producttogroup` U1 INNER JOIN `processor_group` U2 ON ( U1.`group_id` = U2.`id` ) WHERE U2.`from_1c` = False)); +----------+ | COUNT(*) | +----------+ | 237565 | +----------+ 1 row in set (0.66 sec) mysql> SELECT COUNT(*) FROM `catalog_product` INNER JOIN `processor_producttogroup` ON ( `catalog_product`.`code` = `processor_producttogroup`.`product_id` ) WHERE (`processor_producttogroup`.`group_id`) IN (SELECT U0.`id` FROM `processor_group` U0 WHERE U0.`from_1c` = False); +----------+ | COUNT(*) | +----------+ | 244500 | +----------+ 1 row in set (0.77 sec)

Оооо да, детка!

Google
Hot
31.08.2017
10:05:12
In [137]: Product.objects.filter(groups__not_in=Group.objects.filter(from_1c=False)).count() Out[137]: 259 In [138]: Group.objects.filter(from_1c=False).count() Out[138]: 244500 In [139]: Group.objects.filter(from_1c=False).count() Out[139]: 259 In [140]: Product.objects.filter(groups__not_in=Group.objects.filter(from_1c=False)).count() Out[140]: 259 In [141]: Product.objects.filter(groups__not_in=Group.objects.filter(from_1c=False)).count() Out[141]: 244500

Мне же обещали сложные задачи.

Хотя по-моему, поехавшая на всю голову ORM - это перебор.

Artyem
31.08.2017
10:09:33
орм то явно непричём, всё чо она делает это возвращает ответ из базы. есть конечно вариант что что-то неявным образом у вас патчит запросы, и допустим данные берутся из кеша, вместо запроса в бд

Hot
31.08.2017
10:11:22
Да я вроде понял.

Если сдвинуть результаты от запросов на одну строку - то всё выдаётся то, что нужно и так, как нужно.

Artyem
31.08.2017
10:11:40
LOGGING в настройках джанги используется?

Hot
31.08.2017
10:11:46
То есть у меня упоролся интерпретатор.

Сейчас ищу, где именно.

И не могу найти.

Artem
31.08.2017
10:14:54
И не могу найти.
сколько сообщений я прочитал, вообщем, такая балалайка может идти, когда делаешь order_by по удаленному полю, но в твоем случае хрень какая-то

Hot
31.08.2017
10:15:57
У меня всё-таки упоролась именно ORM.

Интерпретатор на обычной арифметике ведёт себя нормально.

Artem
31.08.2017
10:16:21
попробуй еще сделать таким образом: Product.objects.annotate(cnt_groups=Count('groups')).filter(groups__not_in=Group.objects.filter(from_1c=False))

или же с CASE...WHEN

Hot
31.08.2017
10:16:35
Не, я хочу понять первопричину.

Суть этих граблей.

Artem
31.08.2017
10:16:45
я думаю, там херня творится, что каунтер не правильно себя ведет

Hot
31.08.2017
10:16:49
Это же тянет на статейку на хабр или пост в блог.

Google
Denis
31.08.2017
10:17:33
В нормальном питоне проблема сохраняется?

Artem
31.08.2017
10:18:14
и вообще, довольно странное поведение, тут скоре умение готовить ОРМку

Hot
31.08.2017
10:19:20
В другой вкладке оно ведёт себя как надо.

Поэтому сохранил полный лог, и на досуге планирую разбор полётов и куда-нибудь выложить свои выводы по этому поводу.

УПОЛЗ ПИТОН

Artem
31.08.2017
10:25:52
включая и кастомные Аггрегационные функции

Hot
31.08.2017
10:26:34
Беда либо в ipython, либо в шелле от django, либо в ORM.

Artem
31.08.2017
10:26:38
Мир. Труд, Жвачка.

Hot
31.08.2017
10:26:44
У меня ORM уползла.

На 1 запрос вперёд.

Artem
31.08.2017
10:26:53
а какая версия жанги?

Hot
31.08.2017
10:26:55
Точнее вывод из неё.

1.8.18

Artem
31.08.2017
10:27:29
Точнее вывод из неё.
настрой логгинг, что бы при наборе запроса, она тебе принтовала дебажные запросы

и все станет ясно

сможешь точно сверить что делаешь не так

и кто в этом случае не прав

Hot
31.08.2017
10:28:39
Да я очкую из интерпретатора выходить.

Или можно логи прямо там врубить?

Google
Artem
31.08.2017
10:39:54
вообще, можно и прям там

LOGGING = { 'version': 1, 'formatters': { 'verbose': { 'format': '%(levelname)s %(asctime)s %(module)s ' '%(process)d %(thread)d %(message)s' }, 'simple': { 'format': '%(levelname)s %(message)s' }, }, 'handlers': { 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', 'formatter': 'simple' } }, 'loggers': { 'django': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': True, }, } }

этого должно хватить

и потом сделай: from django.conf import settings settings.LOGGING = LOGGING

и бей вновь запросы, там должны логироваться

Hot
31.08.2017
10:43:14
А где он логи сохранит?

Artem
31.08.2017
10:43:38
нигде, реалтаймом отображает в консольке

как запросы будешь выполнять

Hot
31.08.2017
10:43:48
А ещё, можно ли как-то в этой ORM сказать, что поле должно быть уникальным при запросе? То есть, если оно нашло тачку синего цвета, то другие синие тачки игнорить.

Не отображает :(

Artem
31.08.2017
10:44:22
да, это делаешь DISTINCT по условию

а не, соврал

делаешь аннотацию для конкретики синего цвета, и по тому полю цвета, делаешь дистинк. После чего оно добавится в гроуп бай и у тебя будет строго одного тачка синего цвета

Ahmed
31.08.2017
10:57:33
Ребята меня этот докер и youtube-dl заебал уже, установил ffmpeg в контейнер celery, но все равно ругается типа его нет надо установить celery_1 | youtube_dl.utils.DownloadError: ERROR: ffprobe or avprobe not found. Please install one

Artem
31.08.2017
10:58:54
еще лучше

serbernar
31.08.2017
10:59:58
Какие-то гейские стикеры

Igor
31.08.2017
11:03:18
Если у меня в models.py первого модуля импортируется класс с models.py втогого модуля, то как мне сделать импорт в models.py второго модуля класса с models.py первого модуля??

По моему оно заходит в перехрестный импорт и ломается((

Страница 509 из 1273