【发布时间】:2013-09-12 02:19:04
【问题描述】:
我正在将 sqlalchemy 与 sqlite 引擎(开发服务器)一起使用,并且刚刚发现在更新查询之后,下一个 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 查询不会相交。
【问题讨论】:
标签: python sqlite sqlalchemy pyramid