SQLAlchemy обновляет внешние ключи при изменении первичного ключа пользователя - PullRequest
0 голосов
/ 26 декабря 2018

Как бы выглядела связь и внешний ключ, если бы я хотел убедиться, что внешний ключ обновлен или вся строка удалена, если первичный ключ пользователя когда-либо обновляется или удаляется.В настоящее время у меня есть это.

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')
...