Python 如何更新炼金术关联表?

Python 如何更新炼金术关联表?,python,flask,sqlalchemy,flask-sqlalchemy,Python,Flask,Sqlalchemy,Flask Sqlalchemy,我有一个这样的模型: taught_courses = db.Table( 'taught_courses', db.Column('teacher_id', db.Integer(), db.ForeignKey('teacher.id')), db.Column('course_id', db.Integer(), db.ForeignKey('course.id')), ) class Teacher(db.Model): __tablename__ =

我有一个这样的模型:

taught_courses = db.Table(
    'taught_courses',
    db.Column('teacher_id', db.Integer(), db.ForeignKey('teacher.id')),
    db.Column('course_id', db.Integer(), db.ForeignKey('course.id')),
)

class Teacher(db.Model):
    __tablename__ = 'teacher'
    id = db.Column(db.Integer, primary_key=True)
    taught_courses = db.relationship('Course', secondary=taught_courses, lazy='subquery',
                                     backref=db.backref('courses', lazy=True))
    # ...
    # ...

class Course(db.Model):
    __tablename__ = 'course'
    id = db.Column(db.Integer, primary_key=True)
    # ...
    # ...
下面是我如何将数据插入数据库:

teacher = Teacher(
    name=form.first_name.data,
    email=form.email.data)
    db.session.add(teacher)

taught_courses = ['Tahsin', 'Arabic Language']   # in the actual case I use this dynamically.

course_id = db.session.query(Course.id).filter(Course.name.in_(taught_courses)).all()

for data in course_id:
    course = Course.query.filter_by(id=data).first()
    course.courses.append(teacher)
    db.session.add(course)
    db.session.commit()
下面是它在数据库中的外观:

teacher = Teacher(
    name=form.first_name.data,
    email=form.email.data)
    db.session.add(teacher)

taught_courses = ['Tahsin', 'Arabic Language']   # in the actual case I use this dynamically.

course_id = db.session.query(Course.id).filter(Course.name.in_(taught_courses)).all()

for data in course_id:
    course = Course.query.filter_by(id=data).first()
    course.courses.append(teacher)
    db.session.add(course)
    db.session.commit()

这是为了插入,现在我想使更新成为可更新的

在另一个例子中,我想让它看起来像这样,在这里我们可以轻松地更新角色


所以我的问题是,如何更新关联表中的记录?

我通过想象下面的例子来解决这个问题

所以,在我的问题中,我用下面的一行来计算:

current_course_name_from_db = ['Tahsin', 'Arabic Language'] # in the actual case I use this dynamically.
want_to_edit_course_with = ['Tahsin']                       # in the actual case I use this dynamically.

course_id_1 = db.session.query(Course.id).filter(Course.name.in_(current_course_name_from_db)).all()
course_id_2 = db.session.query(Course.id).filter(Course.name.in_(want_to_edit_course_with)).all()

for data in course_id_1:
    course = Course.query.filter_by(id=data).first()
    course.courses.remove(teacher)
    db.session.commit()

for data in course_id_2:
    course = Course.query.filter_by(id=data).first()
    course.courses.append(teacher)
    db.session.commit()

所以我要做的第一件事是,删除数据库上的所有进程,然后再次进行循环以附加新值。

我认为在执行提交之前需要添加对象。如果你想添加,你会得到一个序列化错误。有什么想法吗?