Похожие чаты

Здравствуйте, вот код который сохраняет профессии пользователя. https://pastebin.com/53aXidZt Там выбор из

существующих и еще текстовое поле где можно ввести доп профессию (передается параметром extra_profession). В таблице UserProfessionLink лежат айди профессий и пользователей.
Основное, почему спросил здесь -- одна профессия сохранилась дважды, также как и несколько записей в UserProfessionLink с одинаковыми айди пользователей и профессий. Как понимаю, это произошло из-за того что случайно веб-фреймворк вызвал эту функцию почти одновременно дважды? Как можно сделать, чтобы и в этом случае избежать дублирования?
И заодно, как вижу код оч длинный, наверняка алхимия позволяет писать короче, не подскажете что в этом смысле можно поменять? (но основной конечно 1й вопрос)

12 ответов

10 просмотров
Сергей- Автор вопроса

а с этим не подскажете, может быть есть какой-то стандартный метод блокировки от такого (оч удивился когда увидел одинаковые профессии, хоть это и единичный случай) -- кроме unique constraint конечно, или он - самое правильное решение?

Сергей- Автор вопроса
Сергей
а с этим не подскажете, может быть есть какой-то с...

Что-то никто не ответил наверное из-за того что оч длинный код. Но он простейший, и хотел только спросить откуда появилось дублирование в бд (как понимаю случайно вызвалась функция почти одновременно) и как его избежать — только юник констрейнт или есть какойто механизм блокировки вроде транзакции, который можно повесить на функцию? (Или какойто питоновский декоратор чтобы она не выполнялась одновременно)?

Сергей
Что-то никто не ответил наверное из-за того что оч...

Гонок можно избежать, в общем случае, используя более строгие уровни изоляции транзакций, а также через явную блокировку строк (в постгресе есть еще пользовательские advisory локи). Но в случае обеспечения уникальности лучше всего использовать уникальный индекс, так как он простой и дает необходимую гаранти.

Сергей- Автор вопроса
Pavel Павлик
Гонок можно избежать, в общем случае, используя бо...

Спасибо, а как выглядит уникальный индекс? Просто добавить unique в определение поля (или отдельный констрейнт для уникальности нескольких полей вместе)? И нет ли варианта использовать какойто питоновский декоратор чтобы пока эта функция выполняется ее нельзя было вызвать?

Сергей
Спасибо, а как выглядит уникальный индекс? Просто ...

Сергей, Вы увеличили карму Pavel Павлик до 968.94 (+7.07)

Сергей- Автор вопроса
Pavel Павлик
Эмм, а причем тут декораторы в питоне?

Да, необязательно они но в целом какой-то надежный способ не давать выполнить функцию если такая уже выполняется. Если функция асинхронная, вариант проставлять в начале флаг "выполняется" и проверять его — ненадёжный вариант?

Сергей
Да, необязательно они но в целом какой-то надежный...

Отличный план, только это так не работает

Сергей
Да, необязательно они но в целом какой-то надежный...

Да, ненадежный, потому что у тебя может быть несколько инстансов приложения

Сергей- Автор вопроса
Сергей
Спасибо, а как выглядит уникальный индекс? Просто ...

Не надо начинать изучать алхимию до того, как изучил SQL. Так что лучше начни с него, а потом переходи к алхимии

Сергей- Автор вопроса
Pavel Павлик
Не надо начинать изучать алхимию до того, как изуч...

В основном простейшие вещи использую, но так вы правы конечно

Похожие вопросы

Обсуждают сегодня

А кто-то пробовал, уезжая из Эстонии получить э-рез и продолжить вести предпринимательскую деятельность внутри Эстонии, используя свой OÜ?
Lalalashechki Lalala
62
isn't utxo commitements pretty close though if someone wanted to get it over the finish line? my understanding is that most of the ground work was already down by verde
Luke High - Rabbi Of Bcash High Rabbi Of Bcash
23
@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
is the buyback program live and at what prices are the purchases fixed? excuse me for the bland PA question, sophisticated defi people keke
Imnothere
20
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Чем оно проблема?
Nikita Uzumaki
21
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
@samkazemian - couple questions: Update on frxBTC? - This would do well with the current influx of institutional investment entering the space Update on future veFXS streams...
Costi
16
Hi, I was reading this https://twitter.com/HouseofChimera/status/1778078991762780408 about Verasity and their likely choice of Tron as blockchain for their token for its low f...
Jordi
13
Заметил в ghci 9.4.8: > :t (<*>) @((->)_) (<*>) @((->)_) :: (w -> (a -> b)) -> (w -> a) -> w -> b Разве не должно (w -> (a -> b)) быть записано как (w -> a -> b)? Это баг, ил...
Михаил
13
Карта сайта