首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sqlalchemy查询返回不正确和过时的结果(对于sqlite引擎)

Sqlalchemy查询返回不正确和过时的结果(对于sqlite引擎)
EN

Stack Overflow用户
提问于 2013-09-08 12:54:30
回答 2查看 2.5K关注 0票数 0

我在sqlite (开发服务器)中使用sqlalchemy,并且刚刚发现在更新查询之后,下一个web请求中的查询返回过时的数据集(这取决于请求使用哪个线程,因为我知道有一个线程池)。

我正在使用scoped_session和docs (DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension())))中推荐的其他内容。

下面是web请求的示例,以及在那里执行的内容。

代码语言:javascript
复制
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-查询不相交。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-08 23:44:46

你需要激活pyramid_tm吐温。

代码语言:javascript
复制
[app:main]

pyramid.includes =
    pyramid_tm

吐温在每个请求之后提交事务,在新请求传入时隐式地启动一个新事务。

当您不启动新事务时,旧事务将不会看到在其他事务(线程)中提交的数据;这是数据库事务的固有特性,因为不这样做会导致不一致错误。

票数 0
EN

Stack Overflow用户

发布于 2013-09-08 13:19:31

您可以使用要获取的值的数据库对象发出一个Session.refresh

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18683909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档