python - 如何更新 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__ = '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()

这是它在数据库中的样子:

enter image description here

这是用于插入的,现在我想要进行更新。

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

enter image description here

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

最佳答案

我通过想象这个 answer 中的情况来弄清楚这一点.

所以,就我的问题而言,我使用下面的行来计算:

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()

所以我做的第一件事是删除数据库中的所有类(class),然后再次循环以附加新值。

关于python - 如何更新 Flask-SQLAlchemy 关联表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57936124/

相关文章:

jquery - Flask:如何添加在按下时动态向表单添加行的按钮

python - chmod heroku 应用程序上的文件夹

python - SQLAlchemy 获取查询结果的列数据类型

python - 使用烧杯将 session 数据存储在 Pyramid 的数据库中

python - 如何调用限制为 1 的 SQLAlchemy 查询?

python - 使用列表理解从元组中提取

python - 包setup.py和Flask目录结构

python - FMU 模块方法 get_states_list()

python - 无法理解为什么 IDLE gui 没有返回作者所说的应该返回的值

python - 在 python 脚本和 C 应用程序之间持续通信