
Vladislav
05.09.2016
08:06:58
ну я тонкости работы драйверов на питоне не сильно знаю, за то хорошо разбираюсь в БД

Severnii
05.09.2016
08:09:37
Драйвера на питоне? Шта?

Sergey
05.09.2016
08:10:29

Vladislav
05.09.2016
08:10:44

Google

Vladislav
05.09.2016
08:11:46

Ярослав
05.09.2016
08:12:25
Hey, let's switch to Telegram:
https://telegram.org/dl

-
05.09.2016
08:24:59
А filter.in_?
Да, это помогло, спасибо. Отрабатывает за 0.2 секунды.

Artem
05.09.2016
08:25:27
Ура!

-
05.09.2016
08:25:42
Было бы круто узнать почему. Кто-нибудь знает?

Artem
05.09.2016
08:26:52
Потому что это не 5000 запросов, а 1?

-
05.09.2016
08:27:30
Нет. Даже 5000 подобных запросов с одним url работают те же 0.2 секунды

Sergey
05.09.2016
08:28:25

Artem
05.09.2016
08:29:46
Может быть, что-то закешировалось. Я имел в виду составить список урлов и сделать один раз filter in, а потом работать с этой коллекцией

-
05.09.2016
08:36:19
q = db.session.query(Movie).filter_by(url=t).one() # 3.0 s
q = db.session.query(Movie).filter(Movie.url.__eq__(t)) # .16 s
q = db.session.query(Movie).filter(Movie.url.in_([t])) # 0.2 s
В общем, не используйте filter_by
Всем спасибо за помощь!

Sergey
05.09.2016
08:38:32
3.0 s ???

Google

-
05.09.2016
08:39:15

Andrey
05.09.2016
08:47:20
А что профайлер говорит?
На чем там все застряло?

Ilya
05.09.2016
08:56:30
надо добавить .one() или что-то подобное, тогда будет честное сравнение

Andrey
05.09.2016
08:57:28
Лол, да
Даже внимания не обратил

@CriOnsKry
05.09.2016
08:57:42

Ilya
05.09.2016
08:58:51
а вообще, надо включать echo=True и смотреть какой SQL генериться, см. http://docs.sqlalchemy.org/en/latest/faq/performance.html (сорри, если уже было, тред не читал)

-
05.09.2016
08:59:26

Ilya
05.09.2016
08:59:29
есть ещё вот такая полезная тулза http://sqltap.inconshreveable.com/
SQLAlchemy не выполняет запрос к БД до последнего момента, т.е. пока ты как-то не обратишься к данным
т.е. db.session.query(Foo).filter_by(id=x) только подготавливает запрос, а вот db.session.query(Foo).filter_by(id=x).one() уже выполнит запрос к БД и выдаст результат

-
05.09.2016
09:13:57
for url in urls:
q = db.session.query(Movie).filter_by(url=url).one() # 2.82 s
q = db.session.query(Movie).filter(Movie.url.__eq__(url)).one() # 2.77 s
q = db.session.query(Movie).filter(Movie.url.in_([url])).one() # 2.86 s
q = db.session.query(Movie).filter(Movie.url.in_(urls)).all() # 0.18 s
В читаемом виде: https://gist.github.com/anonymous/c0c85cfcd06c544fc92f72eb207bef78

@CriOnsKry
05.09.2016
09:21:18
Можно перевод?
Для чего gist.github.com?
Кто-то находит там "озарение"?
Или в виде батарейки?
Типа:
Как решить дважды два!
<Код-шаблон>

Google

Ilya
05.09.2016
09:24:49

-
05.09.2016
09:28:24

Vladimir
05.09.2016
09:47:26
почему ткая разница между 3 и 4, я понять не могу
из-за того что в .one() используется limit?

Ilya
05.09.2016
09:50:03
вся разница в оверхеде на выполнение запроса (сгенерировать сам запрос + round trip по сети + всякая предобработка внутри СУБД), и в 4 ты платишь этот оверхед один раз, а не N

Andrey
05.09.2016
12:57:08
Товарищи, кто-нибудь использовал когда-нибудь ELASTICSEARCH?

Paul
05.09.2016
12:59:51

Andrey
05.09.2016
13:03:33
А для каких целей, если не секрет.

Vladimir
05.09.2016
13:04:50
я например в него логи собираю
раньше я им fts делал и анализ текстов

Sergey
05.09.2016
13:37:30
поиск текста

Paul
05.09.2016
13:38:34
ну мы им тексты ищем и логи в него складываем. 33 применения. как у подорожника

Artem
05.09.2016
13:40:42
тоже для логов с логстешем

Andrey
05.09.2016
13:45:48
А сложные агрегации делали?
Вроде посчитать количество записей для каждого тега в каком-то поле

time
05.09.2016
13:57:29
Питонистов тут вроде нет, но всё равно загадаю загадку (не моя, из книжки):
Что будет в результате
t = (1, 2, [30, 40])
t[2] += [50, 60]
a) (1, 2, [30, 40, 50, 60])
b) TypeError (кортеж не поддерживает item assignment
c) ничего
d) a и b

Игорь
05.09.2016
13:58:45
Господа, скажите как заставить джангу не кешировать шаблоны?
я сейчас ее рестартую после каждого изменения, чтобы увидеть изменения в интерфейсе (чуть не каждую минуту)

Andrew
05.09.2016
13:59:53
Питонистов тут вроде нет, но всё равно загадаю загадку (не моя, из книжки):
Что будет в результате
t = (1, 2, [30, 40])
t[2] += [50, 60]
a) (1, 2, [30, 40, 50, 60])
b) TypeError (кортеж не поддерживает item assignment
c) ничего
d) a и b
b

Google

Aragaer
05.09.2016
14:00:01
d
где-то это недавно обсуждалось

Pavel
05.09.2016
14:00:47
b

time
05.09.2016
14:00:51
да, d
>>> t=(1,2,[3,1])
>>> t[2]+=[3,5]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> t
(1, 2, [3, 1, 3, 5])
>>>

Ilya
05.09.2016
14:01:52
интересно, почему так. я бы ожидал a

Aragaer
05.09.2016
14:02:20
а если делать через extend, то ок

time
05.09.2016
14:02:37
потому что не происходит ассайнмента вообще

Aragaer
05.09.2016
14:03:44
операция += сначала в список добавит новые элементы, а потом переприсвоит список обратно в тупл
тот же самый список

Andrey
05.09.2016
14:04:04
d

Aragaer
05.09.2016
14:04:06
но в тупл присваивать нельзя, даже то же самое

Oleg
05.09.2016
14:04:11
давайте подискутируем - 4 пробела или таб? почему в PSR, PEP, Java code convention - везде 4 пробела ?

Aragaer
05.09.2016
14:04:20
4 пробела

Johnnie
05.09.2016
14:04:30
4 таба

Oleg
05.09.2016
14:04:39
4 раза нажать или 1?

Aragaer
05.09.2016
14:04:40
только не надо их набирать, нажимая на пробел

Oleg
05.09.2016
14:04:42
в чем логика

Google

Aragaer
05.09.2016
14:04:57
ничего не надо нажимать, надо использовать встроенные в редактор средства индентации

time
05.09.2016
14:05:12

Aragaer
05.09.2016
14:05:38
более того, таб, который раскрывается в 4 пробелв

time
05.09.2016
14:05:48
срач "пробелы или табы" неактуален и сводится к настройке иде "как делают все в моей команде"

Aragaer
05.09.2016
14:05:59
и которые удаляются одним бекспейсом

Kolyann
05.09.2016
14:06:03
Табы или пробелы?
Давайте банить умников, которые в 2016 году вбрасывают так толсто – 18
??????? 56%
Табы – 8
??? 25%
Пробелы – 6
?? 19%
? 32 people voted so far.

Oleg
05.09.2016
14:06:34
но опять же через настройку иде используется таб?
ну понятно что есть ctrl+alt+L

Aragaer
05.09.2016
14:06:57
нет

Kolyann
05.09.2016
14:06:59
Кажется и табы и пробелы проиграли в этом чудном опросе

time
05.09.2016
14:06:59
чо за таб?
при нажатии на "таб" не печатается таб, выполняется операция "сделать отступ"

Kolyann
05.09.2016
14:07:16

Aragaer
05.09.2016
14:07:20
таб это кнопка, которую я нажимаю чтобы вставить 4 пробела

Oleg
05.09.2016
14:07:22
но смысл - настраивать иде чтобы она через таб делала 4 пробела - значит есть используется таб по факту

time
05.09.2016
14:07:24
выдыхай, бобёр, уже 2018

Oleg
05.09.2016
14:07:51
смысл было делать 4 пробела если все равно все нажимают таб?