мое текущее решение:
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_conditionsSET is_checked=trueFROM conditionWHERE form_conditions.condition_id = condition.id AND form_conditions.form_id = 1 AND condition.name IN ('new', 'used', 'demo');я всегда выполню только 2 апдейта в базу, независимо от количества строк обновляемыхВ результате я всегда выполню только 2 апдейта в базу независимо от количества обновляемых строк
А может быть поменять первичный индекс? Убрать этот id_ а вместо него использовать name т.к. он там же будет уникальный. Тогда у нас отпадёт надобность обращаться вообще во вторую таблицу, чтобы узнать его id
Вторая таблица останется чисто на вывод информации.
Есть бизнесрулы, которые я не могу менять на лету. Меня интересует оптимальный запрос, только)
Попробовал вставить вариант арбнета в консоль - чекер мне покрутил у виска))) Ошибка на ошибке. Не знаю, может в мускле так можно, постгрес ругается. Невозможно апдейтать по 2-м таблицам
Удивительно как только тебя держат, хотя чего удивляться начальники у вас ещё тупее по ходу..
Пусть хоть миллион, в запросе выборка идёт только полей с
CASE тут вообще не нужен. А еще раз начнешь переходить на личности - увидишь результат.
Какие значения попадут в is_checked? Пример
Нет. Суть - найти оптимальное и красивое решение. естественно что все работает и в пределах коммита и в транзакции. Но не хотелось бы идти в базу 50 раз когда можно 2
Все крутится на AWS с оплатой за ресурсы
Тоже мне инженер 😁 гнать таких сраной метлой
Серьезно? А если у меня будет 50 name в condition? " Это раз и второе - твой код вообще не будет работать
Что по итогу попадет в is_checked?
Эм... ну формируйте запросы соединяя их. Будет два запрос, один на первую таблицу, второй на вторую.
Я видимо непонятно обьяснил задачу
Мне видится неправильный ответ и соответственно - некорректный вопрос.
Могу пояснить на моем примере. Я хоть имею профильное образование, очень долго работал в другой сфере - жизнь заставила. Торговля, потом аренда авто, в какой то момент реклама начала уходить с ТВ и газет в Сеть, возникла необходимость сделать свой сайт. Набросал на коленке чисто HTML странички. Потом товарищ помог перевести на Вордпрес, начал его дорабатывать, разместил рекламы и заметил что это стало приносить ощутимый доход. Сделал еще несколько сайтов в тематике, которую понимал, продажа рекламы стала вполне серьезным источником дохода. Потом ушел в разработку, но это уже немного иное.
Суть отступления - поставить цель. Если реклама - значит нужна тематика, в которой вы будете конкурентны, котороая в топах по запросам и есть возможность отхватить трафик. Может вы хорошо разбираетесь в резьбовых соединениях, но многим ли нужна эта информация? Значит нужно искать смежные отрасли, которые вы легко освоите и сможете выдавать полезный контент, пользующийся спросом.
А ломать ноги для достижения непонятного результата - глупо. Вы, может и покорите Эверест, но дальше -то вам жить без ног...
это ж сколько оперативы нужно брат?))
К меня всего 16 гигов и браузеры не единственное что постоянно висит. Тимс, телега, вайбер , слак. Постман, пайчарм, Аутлук - это минимальный набор, стартующий при загрузке
В консоли разработчика браузера отключите кэш и держите ее открытой.