Похожие чаты

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

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

12 ответов

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
@Benzenoid can you tell me the easiest, and safest way to bu.y HEX now?
Živa Žena
20
This is a question from my wife who make a fortune with memes 😂😂 About the Migration and Tokens: 1. How will the old tokens be migrated to the new $LGCYX network? What is th...
🍿 °anton°
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
What is the Dex situation? Agora team started with the Pnetwork for their dex which helped them both with integration. It’s completed but as you can see from the Pnetwork ann...
Ben
1
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Anyone knows where there are some instructions or discort about failed bridge transactions ?
Jochem
21
@lozuk how do I get my phex copies of my ehex from a atomic wallet, to move to my rabby?
Justfrontin 👀
11
Карта сайта