Sly32

Рейтинг
378
Регистрация
29.03.2012
Должность
Software engineer

мое текущее решение:

    def product_types_update(self, session, data):
        """
        Update data for relations tables
        :param data:
        :return:
        """
        if data:
            relation_true, relation_false = self.get_relation_data(self.condition_data)
            if relation_true:
                self.recipient_query(session, True, relation_true)
            if relation_false:
                self.recipient_query(session, False, relation_false)

    def product_query(self, session, statement, relation):
        query = update(FormProductTypes).values({"is_checked": statement})
        query = query.where(FormProductTypes.product_type_id == ProductType.id)
        query = query.where(FormProductTypes.form_id == self.form_id)
        query = query.where(ProductType.name.in_(relation))
        session.execute(query)

где data:

 def get_relation_data(self, data):
        relation_true = []
        relation_false = []
        for item in data:
            if item.get('checked'):
                relation_true.append(item.get('value'))
            else:
                relation_false.append(item.get('value'))
        return relation_true, relation_false


что трансформируется в такой запрос:

UPDATE form_conditions
SET is_checked=true
FROM condition
WHERE form_conditions.condition_id = condition.id
  AND form_conditions.form_id = 1
  AND condition.name IN ('new', 'used', 'demo');
я всегда выполню только 2 апдейта в базу, независимо от количества строк обновляемых

В результате я всегда выполню только 2 апдейта в базу независимо от количества обновляемых строк
На нашу галеру еще осенью мы брали джунов. А теперь вот месяц почти пытаюсь продать одного - со скрипом идет. 
И кто там писал месяц два потерпеть? Думаю, наоборот, будет только хуже. 
LEOnidUKG #:

А может быть поменять первичный индекс? Убрать этот id_ а вместо него использовать name т.к. он там же будет уникальный. Тогда у нас отпадёт надобность обращаться вообще во вторую таблицу, чтобы узнать его id

Вторая таблица останется чисто на вывод информации.

Есть бизнесрулы, которые я не могу менять на лету. Меня интересует оптимальный запрос, только)

Попробовал вставить вариант арбнета в консоль - чекер мне покрутил у виска))) Ошибка на ошибке. Не знаю, может в мускле  так можно, постгрес ругается. Невозможно апдейтать по 2-м таблицам

ArbNet #:

Удивительно как только тебя держат, хотя чего удивляться начальники у вас ещё тупее по ходу..

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

CASE тут вообще не нужен. А еще раз начнешь  переходить на личности - увидишь результат.

Какие значения попадут в is_checked? Пример

LEOnidUKG #:
Это же не академическая у вас задача?

Нет. Суть - найти оптимальное и красивое решение. естественно что все работает и в пределах коммита и в транзакции. Но не хотелось бы идти в базу 50 раз когда можно 2

Все крутится на AWS с оплатой за ресурсы

ArbNet #:

Тоже мне инженер 😁 гнать таких сраной метлой

Серьезно? А если у меня будет 50 name в condition? " Это раз и второе - твой код вообще не будет работать

Что по итогу попадет в is_checked?

LEOnidUKG #:

Эм... ну формируйте запросы соединяя их. Будет два запрос, один на первую таблицу, второй на вторую.

Я видимо непонятно обьяснил задачу 

Мне видится неправильный ответ и соответственно - некорректный вопрос. 

Могу пояснить на моем примере. Я хоть имею профильное образование, очень долго  работал в другой сфере - жизнь заставила. Торговля, потом аренда авто, в какой то момент реклама начала уходить с ТВ и газет в Сеть, возникла необходимость сделать свой сайт. Набросал на коленке чисто HTML странички. Потом товарищ помог перевести на Вордпрес, начал его дорабатывать, разместил рекламы и заметил что это стало приносить ощутимый доход. Сделал еще несколько сайтов в тематике, которую понимал, продажа рекламы стала вполне серьезным источником дохода. Потом ушел в разработку, но это уже немного иное. 

Суть отступления - поставить цель. Если реклама - значит нужна тематика, в которой вы будете конкурентны, котороая в топах по запросам и есть возможность отхватить трафик. Может вы хорошо разбираетесь в резьбовых соединениях, но многим ли нужна эта информация? Значит нужно искать смежные отрасли, которые вы легко освоите  и сможете выдавать полезный контент, пользующийся спросом.

А ломать ноги для достижения непонятного результата - глупо. Вы, может и покорите Эверест, но дальше -то вам жить без ног...

limyh #:

это ж сколько оперативы нужно брат?))

К меня всего 16 гигов и браузеры не единственное что постоянно висит. Тимс, телега, вайбер , слак. Постман, пайчарм, Аутлук - это минимальный набор, стартующий при загрузке

Dram #:
Все спасибо - кеш браузера был виноват

В консоли разработчика браузера отключите кэш и держите ее открытой. 

Всего: 7663