Сделал такие модели:
class Editor(db.Model):
__tablename__ = 'editors'
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer(), db.ForeignKey('users.id', ondelete='CASCADE'))
message_id = db.Column(db.Integer(), db.ForeignKey('messages.id', ondelete='CASCADE'))
class Message(db.Model):
__tablename__ = 'messages'
id = db.Column(db.Integer, primary_key=True)
text = db.Column(db.String(404))
tags = db.Column(db.String(100), default=0)
date = db.Column(db.DateTime, default=datetime.now())
creator_id = db.Column(db.Integer(), db.ForeignKey('users.id', ondelete='CASCADE'))
editor = relationship(Editor, backref="parent", passive_deletes=True)
@property
def serialize(self):
return {'id': self.id, 'text': self.text, 'tags': self.tags, 'date': self.date, 'creator_id': self.creator_id}
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100))
count_messages = db.Column(db.Integer, default=0)
api_key = db.Column(db.String(32))
message = relationship(Message, backref="parent", passive_deletes=True, cascade="all,delete")
editor = relationship(Editor, backref="parent1", passive_deletes=True, cascade="all,delete")
def __init__(self,*args,**kwargs):
super(User, self).__init__(*args, **kwargs)
self.api_key = secrets.token_urlsafe(32)
@property
def serialize(self):
return {'id': self.id, 'name': self.name, 'count_messages': self.count_messages}
Когда удаляю запись из users видает такую ошибку:
sqlalchemy.exc.IntegrityError: (pymysql.err.IntegrityError) (1451, 'Cannot delete or update a parent row: a foreign key constraint fails (lab_5.editors, CONSTRAINT editors_ibfk_1 FOREIGN KEY (user_id) REFERENCES users (id))') [SQL: DELETE FROM users WHERE users.id = %(id)s] [parameters: {'id': 1}] (Background on this error at: http://sqlalche.me/e/gkpj)
Удаляю так:
db.session.delete(u)
db.session.commit()
Ну дык у Вас определен внешний ключ в таблице lab_5.editors на таблицу users, о чем и говорит сообщение об ошибке:
sqlalchemy.exc.IntegrityError: (pymysql.err.IntegrityError) (1451, 'Cannot delete or update a parent row: a foreign key constraint fails (lab_5.editors, CONSTRAINT editors_ibfk_1 FOREIGN KEY (user_id) REFERENCES users (id))') [SQL: DELETE FROM users WHERE users.id = %(id)s] [parameters: {'id': 1}] (Background on this error at: http://sqlalche.me/e/gkpj)
Определите в этом ключе необходимое поведение при удалении "родительских данных", используя конструкцию ON DELETE .... Иначе перед тем, как удалить пользователя из таблицы users, Вам придется вручную удалить все записи, которые на него ссылаются через внешние ключи. Я так понимаю, если пользователь удаляется и users - то он уже никак не может быть редактором и должен быть удален из editors. Вот и добавьте во внешний ключ поведение ON DELETE CASCADE.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости