2

Flask と Flask-SQLAlchemy 拡張機能で 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 は次の 3 つのクエリを実行します。

  1. SELECT book.id AS book_id, book.title AS book_title FROM book WHERE book.id = ?
  2. UPDATE ブック SET タイトル=? WHERE book.id = ?
  3. SELECT book.id AS book_id, book.title AS book_title FROM book WHERE book.id = ?

SQLAlchemy が 3 つすべてのクエリを作成する理由は理解できますが、単純に 1 つのレコードを更新するには少し過剰に思えます。ここで発生するクエリの量を最適化する方法はありますか?

(注として、私は、慣例に基づいてテンプレートをレンダリングするために、エンドポイントにいくつかのラップを持っています。これが、表示されない理由ですrender_template)

4

0 に答える 0