
Dmitry
22.03.2018
16:34:35
я бы посмотрел на код. думаю, там запрос компилируется 1000000 раз в цикле

Глеб
22.03.2018
16:34:45
ну я-же не наркоман

Dmitry
22.03.2018
16:34:50
можно еще в этот цикл засунуть import чего-нить, для гарантии

dmks
22.03.2018
16:35:29

Google

Глеб
22.03.2018
16:35:55
ну так код тестов -_-
да я с января пороги этим графиком обиваю, уже покрылось всё пылью. Сейчас попробую откопать.

Pavel
22.03.2018
16:36:35
я не помню, там запрос можно компилить без заранее вшитых аргументов?

Глеб
22.03.2018
16:37:34
Я не нашел способа

Andy
22.03.2018
16:37:40

vlade11115
22.03.2018
16:37:46

Глеб
22.03.2018
16:38:22
https://pastebin.com/zqQf8T5D
Вот, можно посмотреть предметно

Dmitry
22.03.2018
16:38:35
> я не помню, там запрос можно компилить без заранее вшитых аргументов?
> Я не нашел способа
а я хотел попробовать :)
почему каждый раз, когда я вижу асинхронную наркоманию, меня тянет блевать? :(

Pavel
22.03.2018
16:39:27
асинхронно изо всех щелей?)

Alexey
22.03.2018
16:39:37
Да хоть бы и так.

Dmitry
22.03.2018
16:39:40
где тут алхимия то, в пастебине?

Глеб
22.03.2018
16:39:49
Закомментирована

Google

Глеб
22.03.2018
16:40:15
Оба куска, что рабочий, что закоментированный, делают одно и тоже

Pavel
22.03.2018
16:40:15
странно, ведь закоментированный код - самый быстрый

Dmitry
22.03.2018
16:40:36
не вижу там в закомментированном алхимической query - я тупой?

Глеб
22.03.2018
16:40:51
Бляяя
https://i.imgur.com/aEnFEOH.png
Вот, что должно было быть в закоменченом коде

Dmitry
22.03.2018
16:43:56
ну тут не скомпилируешь :)
хуле. если даже таблицу каждый раз вычисляют

Alexey
22.03.2018
16:44:25

Глеб
22.03.2018
16:44:47
Нихуя, там return self._table
да, да, бывает. Раньше в self.from_row было больше параметров

Alexey
22.03.2018
16:45:44
Да я понимаю, чо ты как это.
Не мог не доебаться прост. Ты как первый раз.

Andy
22.03.2018
16:46:20
Ты тупо вытаскиваешь из базы данные из одной и той же таблицы представляя айдишники?
И каждый раз вызываешь это?

Глеб
22.03.2018
16:46:54
Подставляя*
да
то-есть запрос-то не меняется. В худшем случае их два, с разными where

Andy
22.03.2018
16:48:04
Ну как бы да

Глеб
22.03.2018
16:48:50
Только вот compile вызывается внутри execute, а не в момент "построения"

Google

Глеб
22.03.2018
16:49:35
вот туточки

Dmitry
22.03.2018
16:50:31
покажи пример реального запроса, который ты собрал этим говном
что в базу уходит
или покажи объект query интроспекцией

Глеб
22.03.2018
16:52:45
SELECT profiles.id AS profiles_id, profiles.created_at AS profiles_created_at, profiles.updated_at AS profiles_updated_at, profiles.name AS profiles_name, profiles.nickname AS profiles_nickname, profiles.phone AS profiles_phone, profiles.avatar_id AS profiles_avatar_id, profiles.device_types AS profiles_device_types, profiles.visibility AS profiles_visibility, profiles.last_activity AS profiles_last_activity, profiles.status AS profiles_status, profiles.ref_images AS profiles_ref_images
FROM profiles
WHERE profiles.id IN (%(id_1)s)

Dmitry
22.03.2018
16:53:20
то есть за вычетом profiles.id IN (%(id_1)s) нихрена в целом не меняется от раза к разу?

Глеб
22.03.2018
16:53:51
да

Dmitry
22.03.2018
16:54:10
а если бы ты скомпилировал запрос, где бы ты его хранил и как оттуда доставал?
я просто в этой асинхронной лапше в полночь не понимаю и разбираться даже не встает

Alexey
22.03.2018
16:54:39
В хеш положить.

Глеб
22.03.2018
16:54:55
Меньшая из проблем

Alexey
22.03.2018
16:55:08
А синхронно оно так же тупит?

Dmitry
22.03.2018
16:55:25
я не спрашиваю, бОльшая или мЕньшая
я хочу понять как тебе помочь, а ты пока выебываешься

Глеб
22.03.2018
16:55:42
Черт его знает, но код, который тупит в профилировании, синхронный

Dmitry
22.03.2018
16:57:43
compiled_query = query.statement.compile()
params = compiled_query.params
prepared_sql = compiled_query.string

Глеб
22.03.2018
16:58:42
{AttributeError}'Select' object has no attribute 'statement'

Dmitry
22.03.2018
16:58:47
pg2_cursor = query.session.connection().connection.cursor()
sql = pg2_cursor.mogrify(prepared_sql, params)

Google

Dmitry
22.03.2018
16:59:08
бля, это бы говно локально в дебаггер

Глеб
22.03.2018
16:59:14
так вот уже

Dmitry
22.03.2018
16:59:29
не ставить же асинхронщину себе бесплатно
и вслепую гадать. это я из рабочего кода взял

Глеб
22.03.2018
17:00:03
а твой query не ORM'ный?
Но в целом суть ясна. mogrify помножит промежуточный SQL на параметры и вернет строку?

Andy
22.03.2018
17:02:41
А там народ пишет, что для алхимии компиляция - самое дорогое и долгое

Petr
22.03.2018
17:03:47
Аж передернуло

Глеб
22.03.2018
17:04:20
Аж передернуло
Ай не говори, хорошо, что в сторонке валяется и все идентификаторы числовые
но рано или поздно с этим кусочком придется поговорить

Dmitry
22.03.2018
17:04:50

Глеб
22.03.2018
17:05:09
query = sa.select([1])
query.compile().string
'SELECT 1'
блеск
спасибо

Dmitry
22.03.2018
17:06:05
во
а query.compile().params покажи ради прикола?

Глеб
22.03.2018
17:06:56
{}
Там ведь select([1])
хм...

Google

Dmitry
22.03.2018
17:07:34
да, чет странно. попробуй на более "сложном" селекте
чтобы where было. а то подставлять имхо некуда просто эти параметры

Глеб
22.03.2018
17:08:18

Dmitry
22.03.2018
17:08:47
вот! :)
.string кидаешь в свой dict, а mogrify потом подставит нужное и в execute

Глеб
22.03.2018
17:10:18
Осталось раздобыть курсор, но это уже легче, чем нагуглить способ вытащить промежуточное представление и помножить его на параметры
Всё завалено orm-примерами
А документацию алхимии писали явно под спайсами

Alexey
22.03.2018
17:11:30
Ну так на название посмотри.

Andy
22.03.2018
17:11:38

Dmitry
22.03.2018
17:11:40
вообще я думаю тебе вот сюда стоит посмотреть https://magicstack.github.io/asyncpg/current/api/index.html#prepared-statements

Andy
22.03.2018
17:11:49
Он втирал его в глаза

Dmitry
22.03.2018
17:12:16
поди conn.prepare() ченить наварит

Andy
22.03.2018
17:12:19
Для алхимии

Dmitry
22.03.2018
17:13:20
вот жопа в том, что в asyncpg скорее всего не будет mogrify()

Глеб
22.03.2018
17:13:39
Будет, я находил

Dmitry
22.03.2018
17:13:40
где-то по дороге от psycopg2 в asyncpg его сто пудов и выкинули
ну тогда и курсор найдешь :))

Глеб
22.03.2018
17:13:57
Только вот он в какой глубине дремлет

Andy
22.03.2018
17:14:15