当前位置: 代码迷 >> python >> flask-sqlalchemy表编辑未显示
  详细解决方案

flask-sqlalchemy表编辑未显示

热度:167   发布时间:2023-07-16 09:54:23.0

这可能是一个非常基本的问题,但是我刚开始学习Flask并碰壁。 我可以将一个表添加到数据库中(当前使用sqlite),并且该表对于其他与数据库的连接可以立即看到,但是任何编辑都不会在一分钟左右的时间内显示出来。

我有桌子:

class Sequence(db.Model):
    __tablename__ = 'sequence'
    __searchable__ = ['sequence','notes']
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(255), unique = True)
    sequence = db.Column(db.String())
    notes = db.Column(db.String())

我正在使用WTForms创建一个表单,然后对其进行解析以进行添加和编辑。

我添加条目的代码是:

@app.route('/add_sequence', methods = ['GET', 'POST'])
@login_required
def add_sequence():
    form = SequenceForm()
    if form.validate_on_submit():
        new_sequence = form.sequence_from_form()
        db.session.add(new_sequence)
        db.session.commit()
        flash('Added new sequence: ' + form.name.data)
        return redirect(url_for('index'))

而我用于编辑条目的代码是:

@app.route('/edit_sequence/<sequence_id>', methods = ['GET', 'POST'])
@login_required
def edit_sequence(sequence_id):
    form = SequenceForm()
    sequence = Sequence.query.filter_by(id=sequence_id).first()
    if sequence == None:
        return render_template('sequence_not_found.html')
    if form.validate_on_submit():
        sequence.name = form.name.data
        sequence.sequence = form.sequence_data.data
        sequence.notes = form.notes.data
        db.session.commit()
        flash('modified sequence ' + sequence.name)
        return redirect(url_for('show_sequence',sequence_id=sequence_id))
    else:
        form.fill_from_sequence(sequence)
        return render_template('edit_sequence.html',form=form, sequence_id=sequence_id)

使用add_sequence进行的任何添加都会立即显示在任何其他数据库连接中,但是使用第二项进行的更改不会立即可见。

您需要将更新后的序列obj添加到数据库会话中

@app.route('/edit_sequence/<sequence_id>', methods = ['GET', 'POST'])
@login_required
def edit_sequence(sequence_id):
    form = SequenceForm()
    sequence = Sequence.query.filter_by(id=sequence_id).first()
    if sequence == None:
        return render_template('sequence_not_found.html')
    if form.validate_on_submit():
        sequence.name = form.name.data
        sequence.sequence = form.sequence_data.data
        sequence.notes = form.notes.data
        db.session.add(sequence) #adding object to session
        db.session.commit()
        flash('modified sequence ' + sequence.name)
        return redirect(url_for('show_sequence',sequence_id=sequence_id))
    else:
        form.fill_from_sequence(sequence)
        return render_template('edit_sequence.html',form=form, sequence_id=sequence_id)

您可以使用来编辑序列对象

 db.session.query(Sequence).filter_by(id=sequence_id).update({'name': form.name.data,'sequence' : form.sequence_data.data, 'notes' : form.notes.data })
 db.session.commit()

为了回答我自己的问题,我遇到的问题似乎是由于Flask-WhooshAlchemy中的错误所致,在此处进行了详细说明: ://blog.miguelgrinberg.com/post/the-flask-mega-

我没有尝试实现所描述的修复程序,但是从我的代码中删除了whoosh索引使我的原始实现工作得以实现。 使用update()似乎也可行,但是当我尝试从数据库中删除条目时遇到了问题。