Сделал такие модели:
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
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как можно выбрать товары вместе с ценами, и нужно потом вернуть результат выборки по ajax допустим в массиве, для дальнейшей обработки товаров...
Взялся помочь человеку с сайтом на Bitrix, начал редактировать файл шаблона и испортил код, сейчас сайт не открывается с ошибкой "[ParseError] syntax...