我正在使用SQLAlchemy和Flask以及Flask-SQLAlchemy扩展。我很困惑的是如何优化记录的更新。作为概念证明,我写了以下端点:
@bp.route('/books', methods=['GET', 'PUT'], endpoint="books_index")
@bp.route('/books/<book_id>', methods=['GET', 'POST'], endpoint="books_show")
def books_index(book_id=None):
book = Book.query.get_or_404(book_id) if book_id else Book()
form = Book.model_form(request.form, book if book_id else None)
verb = "updated" if book_id else "created"
if form.validate_on_submit():
form.populate_obj(book)
db.session.add(book)
db.session.commit()
flash('Book %s successfully' % verb, 'info')
return dict(
books=[] if book_id else Book.query.all(),
book=book,
form=form
)
一切都按照我的意愿运作,但在更新现有的书籍记录时,SQLAlchemy会运行三个查询,它们是:
我理解为什么SQLAlchemy会进行所有三个查询,但仅仅更新一条记录似乎有点过分。有没有办法优化这里发生的查询量?
(作为一个注释,我在端点上有一些包装来根据约定呈现模板,这就是为什么你看不到render_template
)