Похожие чаты

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

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

12 ответов

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

30500 за редактор? )
Владимир
47
any reference of this implementation?
BitBuddha
29
Ⓐrtto, [4/23/24 7:02 PM] Please explain more fully how it is not working exactly, and what are the steps you are taking, and what error messages come or what happens. Ⓐrtto, ...
Ezza Kezza
2
sounds like people have lost their kaspa on tradeogre... does this mean tradeogre not trustworthy?
Ezza Kezza
15
Страшнейшая правда про списки ЦБ. С первых дней жизни P2P сферы, молодые человеки, начитавшись законодательной базы и "внутренних" документов, решили, что им противостоит сер...
Foxcool
3
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
So much speculation in the last week. So much volatility in price. This is because Hedera has a GC that isn't using the network it's governing. Why aren't people asking why a...
Summit Seeker R
8
Anyone else having this error when trying to make transactions?
Datzel
11
Question: How viable is it to use Anvil as the backend infrastructure for managing a TradFi portfolio, while integrating Flexa for instant liquidity and payment solutions? Cou...
Kevin
2
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Карта сайта