Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 28, 2019 23:46:18

freeddos
Зарегистрирован: 2019-08-04
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Sqlalchemy проверка при удалении связных записей

Здравствуйте.
Имеется база со связанными логически таблицами.
Например таблица с пользователями а так же таблица с вносимыми ими данными (например письма под id пользователя).
Если нужно удалить пользователя то и пропадет связь этого пользователя с уже существующими данными.
Есть ли готовое решение для проверки на удаление связных данных или использовать просто. Sql запрос и проверять по id пользователя.

Офлайн

#2 Ноя. 29, 2019 01:56:59

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Sqlalchemy проверка при удалении связных записей

Офлайн

#3 Ноя. 29, 2019 08:33:03

lifemaker
Зарегистрирован: 2019-10-16
Сообщения: 18
Репутация: +  1  -
Профиль   Отправить e-mail  

Sqlalchemy проверка при удалении связных записей

По хорошему в параметрах таблиц должно быть указано “каскадное удаление”. В этом случае движок БД всё сделает сам.

Офлайн

#4 Ноя. 29, 2019 10:37:28

freeddos
Зарегистрирован: 2019-08-04
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Sqlalchemy проверка при удалении связных записей

Вопрос не в удалении, а запрет на удаление.
Точней если я жмакаю удалить пользователя и отрабатывает сеачала валидация на проверку связей, если связи есть то предупредить и не удалять (чтобы не удалить все связи)

Офлайн

#5 Ноя. 29, 2019 11:00:22

lifemaker
Зарегистрирован: 2019-10-16
Сообщения: 18
Репутация: +  1  -
Профиль   Отправить e-mail  

Sqlalchemy проверка при удалении связных записей

Если они связаны только логически, а не на уровне ссылок в БД, то только сначала реализовать проверку.
Если есть ссылки в БД, то через try - при наличие ссылок должно вернуть ошибку.

Офлайн

#6 Ноя. 29, 2019 11:14:06

freeddos
Зарегистрирован: 2019-08-04
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Sqlalchemy проверка при удалении связных записей

Да ссылки настроены через relationship() и ForeignKey.
Тоесть в таблице данных есть id пользователя.
В этом случае если удалю пользователя с существующими связями с таблицей данных то будет исключение в try?

Офлайн

#7 Ноя. 29, 2019 11:26:58

lifemaker
Зарегистрирован: 2019-10-16
Сообщения: 18
Репутация: +  1  -
Профиль   Отправить e-mail  

Sqlalchemy проверка при удалении связных записей

Верно. Запись не должна быть удалена, и будет возвращена соответствующая ошибка.

P.S. Надеюсь Вы ведёте разработку на тестовом стенде.

Офлайн

#8 Ноя. 29, 2019 11:31:53

freeddos
Зарегистрирован: 2019-08-04
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Sqlalchemy проверка при удалении связных записей

lifemaker
P.S. Надеюсь Вы ведёте разработку на тестовом стенде.
Конечно. Совесть чиста.

Офлайн

#9 Ноя. 29, 2019 15:20:44

freeddos
Зарегистрирован: 2019-08-04
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Sqlalchemy проверка при удалении связных записей

Проверил, и не работает. Все равно удаляется даже через try.
Есть две таблицы с пользователями и типами. Следовательно если удалить тип пользователя к которому уже привязаны много других пользователей, то пользователи останутся без типа (что не есть хорошо).

 class users_db(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(30))
    id_user_type = db.Column(db.Integer, db.ForeignKey('users_type.id'))
    user_type = db.relationship('users_type',
                                   backref=db.backref('type', lazy='joined'))
class users_type(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100))

Удаляю типо пользователя вот так:
 users_type.query.filter_by(id=req_form.get('del_id')).delete()
del_id беру из пришедшего GET запроса, облачил это удаление в try, ошибки не словил и дал удалить.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version