问题描述
这可能是一个非常基本的问题,但是我刚开始学习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进行的任何添加都会立即显示在任何其他数据库连接中,但是使用第二项进行的更改不会立即可见。
1楼
您需要将更新后的序列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()
2楼
为了回答我自己的问题,我遇到的问题似乎是由于Flask-WhooshAlchemy中的错误所致,在此处进行了详细说明: ://blog.miguelgrinberg.com/post/the-flask-mega-
我没有尝试实现所描述的修复程序,但是从我的代码中删除了whoosh索引使我的原始实现工作得以实现。 使用update()似乎也可行,但是当我尝试从数据库中删除条目时遇到了问题。