这可能是一个非常基本的问题,但我刚开始使用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进行的任何添加都会立即显示给任何其他数据库连接,但使用第二个条目所做的更改不会立即显示。
答案 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()的使用似乎也有效,但是当我尝试从数据库中删除一个条目时遇到了问题。