Как бы выглядела связь и внешний ключ, если бы я хотел убедиться, что внешний ключ обновлен или вся строка удалена, если первичный ключ пользователя когда-либо обновляется или удаляется.В настоящее время у меня есть это.
class User(Model):
__tablename__ = 'users'
id = db.Column(db.Integer(), primary_key=True)
username = Column(db.String(80), unique=True, nullable=False)
name = Column(db.String(100), nullable=False)
email = Column(db.String(255), unique=True, nullable=False)
roles = db.relationship('Role', secondary='user_roles')
announcements = db.relationship('Announcement', backref='author',
lazy='dynamic')
user_awk_announcement = db.relationship('ViewedAnnouncement', foreign_keys='ViewedAnnouncement.user_id', backref='user',lazy='dynamic')
token: str = ''
class ViewedAnnouncement(Model):
__tablename__ = 'viewed_announcement'
id = db.Column(db.Integer(), primary_key=True)
user_id = db.Column(db.Integer(), db.ForeignKey('users.id', onupdate='CASCADE',), onupdate='CASCADE')
announcement_id = db.Column(db.Integer(), db.ForeignKey('announcement.id',))
В основном прямо сейчас, если объявление или пользователь удален, тогда строка ViewedAnouncement удаляется правильно, но если идентификатор объявления или идентификатор пользователя обновлены, ключи не обновляются в таблице ViewedAnnouncement,Должен ли я обрабатывать это в базе данных вместо использования sqlalchemy?
* edit Я также добавил класс annoucement, если он помогает
class Announcement(Model):
__tablename__ = 'announcement' # required attribute
object_name_repr = 'announcement' # required attribute
id = Column(db.Integer, primary_key=True)
title = Column(db.String(100), nullable=False)
body = Column(db.TEXT, nullable=True)
created_at = Column(db.DateTime, nullable=False, default=dt.datetime.utcnow)
user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
post_awk = db.relationship('ViewedAnnouncement', foreign_keys='ViewedAnnouncement.announcement_id',
lazy='dynamic', cascade='all, delete')