Python 烧瓶sqlalchemy表编辑为';他没有出现

Python 烧瓶sqlalchemy表编辑为';他没有出现,python,sqlite,flask,flask-sqlalchemy,Python,Sqlite,Flask,Flask Sqlalchemy,这可能是一个超级基本的问题,但我刚开始用烧瓶,遇到了一堵墙。我可以将一个表添加到数据库中(目前使用sqlite),其他数据库连接可以立即看到该表,但任何编辑都不会显示一分钟左右 我有一张桌子: class Sequence(db.Model): __tablename__ = 'sequence' __searchable__ = ['sequence','notes'] id = db.Column(db.Integer, primary_key = True)

这可能是一个超级基本的问题,但我刚开始用烧瓶,遇到了一堵墙。我可以将一个表添加到数据库中(目前使用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)
而我编辑条目的代码是:

@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)
@app.route('/edit_sequence/',方法=['GET','POST'])
@需要登录
def编辑顺序(顺序id):
form=SequenceForm()
sequence=sequence.query.filter\u by(id=sequence\u id).first()
如果序列==无:
返回呈现模板('sequence\u not\u found.html')
if form.validate_on_submit():
sequence.name=form.name.data
sequence.sequence=form.sequence\u data.data
sequence.notes=form.notes.data
db.session.commit()
flash('修改的序列'+序列名称)
返回重定向(url_for('show_sequence',sequence_id=sequence_id))
其他:
表格。按顺序填写(顺序)
返回呈现模板('edit\u sequence.html',form=form,sequence\u id=sequence\u id)

使用add_sequence进行的任何添加都会立即显示在任何其他数据库连接上,但使用第二个条目进行的更改不会立即显示。

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

为了回答我自己的问题,我遇到的问题似乎是由于烧瓶WhooshAlchemy中的一个bug造成的,这里有一些详细的描述:


我还没有尝试实现所描述的修复,但是从代码中删除whoosh索引使我最初的实现工作正常。update()的使用似乎也很有效,但是当我试图从数据库中删除条目时遇到了问题。

第二个代码示例中缺少了
db.session.add()
调用。这似乎有效!我在文档中没有看到任何关于update()比直接编辑对象然后提交更可取的内容。有人知道这是否可能是sqlite特有的问题吗?