@ru_python

Страница 1496 из 9768
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
3.0 s ???
На 5к запросов

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

На чем там все застряло?

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

Andrey
05.09.2016
08:57:28
Лол, да

Даже внимания не обратил

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
вторая и третья строчка не выполняют запрос же
Я их сравнил один за другим, комментя каждую из строк. Это просто что-то вроде сводной таблицы: 'используемый метод' и 'время выполнения 5к раз'

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
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
вот, теперь похоже на правду. 1 и 2 должны быть абсолютно эквивалентны, 3 может генерировать чуть другой SQL, но разницы в производительности не должно быть. 4 -- как надо писать (имхо)

Vladimir
05.09.2016
09:47:26
почему ткая разница между 3 и 4, я понять не могу

из-за того что в .one() используется limit?

Ilya
05.09.2016
09:50:03
почему ткая разница между 3 и 4, я понять не могу
потому что в 4, как я понимаю, один запрос возвращающий N элементов, а в остальных случаях N запросов по одному элементу

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

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

Paul
05.09.2016
12:59:51
Товарищи, кто-нибудь использовал когда-нибудь ELASTICSEARCH?
я использую. Думаю, нас тут много таких

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
Господа, скажите как заставить джангу не кешировать шаблоны?

я сейчас ее рестартую после каждого изменения, чтобы увидеть изменения в интерфейсе (чуть не каждую минуту)

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
потому что не происходит ассайнмента вообще

интересно, почему так. я бы ожидал a
пушо += не атомарный. это сначала +, а потом =

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
4 раза нажать или 1?
не нажимать ничего, ide сама всё сделает

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 пробела - значит есть используется таб по факту

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

Страница 1496 из 9768