Как оптимизировать обновление записи при использовании SQLAlchemy и Flask - PullRequest
2 голосов
/ 22 февраля 2012

Я использую 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 выполняет три запроса:

  1. ВЫБРАТЬ book.id КАК book_id, book.title AS book_title ОТ книги WHERE book.id =?
  2. ОБНОВЛЕНИЕ SET SET title =?ГДЕ book.id =?
  3. ВЫБРАТЬ book.id AS book_id, book.title AS book_title ОТ книги WHERE book.id =?

Я понимаю, почему SQLAlchemy выполняет все три запроса,но это кажется чрезмерным для простого обновления одной записи.Есть ли способ оптимизировать количество запросов, происходящих здесь?

(как примечание, у меня есть некоторые обертки на конечных точках для рендеринга шаблонов на основе соглашения, поэтому вы не видите render_template)

...