我正在将 sqlalchemy 与 sqlite 引擎(开发服务器)一起使用,并且刚刚发现在更新查询之后,下一个 Web 请求中的查询返回过时的数据集(这取决于哪个线程用于请求,据我所知有一个池线程)。
我正在使用docs ( )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 查询不会相交。