-
Notifications
You must be signed in to change notification settings - Fork 14
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Ошибка при использовании session.merge в методе new для модели User. #10
Comments
Приложите, пожалуйста, полный traceback |
|
@MassonNN я вот думаю, что это скорее даже не баг, в целом, метод new как раз и подразумевает только добавление новой записи в БД, но не обновление ее или возврат. Просто merge хорошо будет использоваться в моем случае, если решить проблему с первичным ключом, но не знаю как. |
Временное решение. Оберните вызов метода new в try except, ловите ошибку и в случае ее возникновения вызывайте update. |
А вообще в качестве первичного ключа разумно использовать telegram user_id пользователя? |
Нет, user ID это информация, приходящая от телеграмма, вы не можете ей доверять на 100% |
Тогда merge наверное стоит заменить на add в моем случае? Например, если не заинтересован в обновлении данных записи и делать проверку наличия записи в БД перед add. Что-то такое?
|
пока что сделайте так, как я вам сказал, в будущем поменяю этот метод чтобы он обрабатывал такие места |
Что-то типа такого |
Мое личное мнение, что решение, которое предлагает @cyborg728, можно считать одним из лучших, но в то же время, метод merge не должен вести себя так как ведет в настоящем ищью. Мое предложение - создать новый метод репозитория - add_or_update, с использованием решения от @cyborg728, оставив текущий метод add без изменений. |
В случае с его мидлварью - get_or_create 🙂 |
Использовал данный репозиторий и конкретно метод new для модели User.
Делал Middleware для пользователей, чтобы все пользователи фиксировались в БД после любого взаимодействия.
После первого commit все нормально, пользователя сначала не существует - пользователь создается и передается дальше в Handler.
После второго и последующих commit проблема.
Потому что есть атрибут user_id, который должен быть уникальным, но он не определен как первичный ключ.

Merge смотрит по первичному ключу вроде, который есть у модели User как атрибут id от Base.

В общем, при втором и последующих commit возникает ошибка, мол, запись с таким user_id уже существует.
Возможно конкретно для модели User не стоит использовать merge? Или переопределить первичный ключ?
The text was updated successfully, but these errors were encountered: