flask-sqlalchemy表编辑没有显示

时间:2014-03-23 17:37:06

标签: python sqlite flask flask-sqlalchemy

这可能是一个非常基本的问题,但我刚开始使用Flask并遇到了问题。我可以向db(当前使用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进行的任何添加都会立即显示给任何其他数据库连接,但使用第二个条目所做的更改不会立即显示。

2 个答案:

答案 0 :(得分:0)

您需要将更新的序列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)

您可以使用update cluase

编辑序列对象
 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()

答案 1 :(得分:0)

要回答我自己的问题,我遇到的问题似乎是由于Flask-WhooshAlchemy中的一个错误,这里有一些详细描述:http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xvi-debugging-testing-and-profiling

我还没有尝试实现所描述的修复程序,但是从我的代码中删除了嗖嗖索引,这使我的原始实现工作正常。 update()的使用似乎也有效,但是当我尝试从数据库中删除一个条目时遇到了问题。