Flask-SQLAlchemy更新一对多记录

问题描述 投票:1回答:1

我有一对多的关系模型,这是我的模型的摘要:

class ScheduleDayAndTime(db.Model):
    __tablename__ = 'schedule_day_and_time'
    id = db.Column(db.Integer, primary_key=True)
    day = db.Column(db.Enum(DayNameList, name='day'))
    start_at = db.Column(db.Time())
    end_at = db.Column(db.Time())
    requisition_schedule_id = db.Column(db.Integer, db.ForeignKey('requisition_schedule.id'), nullable=True)



class RequisitionSchedule(db.Model):
    __tablename__ = 'requisition_schedule'
    id = db.Column(db.Integer, primary_key=True)
    schedule_day_and_time = db.relationship('ScheduleDayAndTime', backref='requisition_schedule', lazy=True)
    # ...
    # ...

如何更新多表上的数据。?

现在就这样尝试:

requisition_schedule = RequisitionSchedule.query.filter_by(id=requisition_schedule_id).first()

requisition_schedule.schedule_day_and_time.clear()
db.session.commit()

schedule_day_and_time_1 = ScheduleDayAndTime(
    day=form.schedule_day.data,
    start_at=form.start_at.data,
    end_at=form.end_at.data,
)

schedule_day_and_time_2 = ScheduleDayAndTime(
    day=form.schedule_day_2.data,
    start_at=form.start_at_2.data,
    end_at=form.end_at_2.data,
)

requisition_schedule.schedule_day_and_time.append(schedule_day_and_time_1)
requisition_schedule.schedule_day_and_time.append(schedule_day_and_time_2)
db.session.commit()

I首先clear数据,然后append新数据。但我认为这不是最佳做法,因为我的表上仍然有旧记录,它只是删除了相关的ForeignKey id,但在相关列上仍然有其他记录。

所以,如何以正确的方式来做..?

python flask sqlalchemy flask-sqlalchemy one-to-many
1个回答
0
投票

我通过执行以下操作找出了这一点:

© www.soinside.com 2019 - 2024. All rights reserved.