私はsqliteエンジン(開発サーバー)でsqlalchemyを使用していますが、クエリを更新した後、次のWebリクエストのクエリが古いデータセットを返すことを発見しました(プールがあることを理解しているので、リクエストにどのスレッドが使用されているかによって異なります)のスレッド)。
私が使用scoped_session
しているのは、ドキュメント ( DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
) のその他の推奨事項です。
Web リクエストの例とそこで実行される内容を次に示します。
request-1:thread-1: SELECT * FROM table WHERE id=1 -> (id:1, data:1)
request-2:thread-2: UPDATE table SET data=2 WHERE id=1; COMMIT
request-3:thread-1: SELECT * FROM table WHERE id=1 -> (id:1, data:1) // STILL data:1 !
request-4:thread-4: SELECT * FROM table WHERE id=1 -> (id:1, data:2) // NEW DATA!
request-5:thread-1: SELECT * FROM table WHERE id=1 -> (id:1, data:1) // AND AGAIN OLD DATA!
これは何ですか?どうすればこの動作を回避できますか? 上記の例では、すべての Web リクエストが連続して実行されるため、SQL クエリは交差しません。