随笔-121  评论-1534  文章-1  trackbacks-99

sqlalchemy在web.py中的session使用

按照sqlalchemy的文档中关于sqlalchemy的session在web应用上下文的生命周期应该是:

Web Server          Web Framework        User-defined Controller Call
-------------- -------------- ------------------------------
web request
->
call controller
-> # call Session(). this establishes a new,
# contextual Session.
session
= Session()

# load some objects, save some changes
objects
= session.query(MyClass).all()

# some other code calls Session, it
's the
# same contextual session as "sess"
session2
= Session()
session2.add(foo)
session2.commit()

# generate content to be returned
return generate_content()
Session.remove()
<-
web response
<-

见:http://www.sqlalchemy.org/docs/05/session.html#lifespan-of-a-contextual-session

不过web.py的cookbook中关于使用sqlalchemy的示例中,最后并没有释放sqlalchemy的session资源,正确的应该如下:

def load_sqla(handler):
web.ctx.orm
= scoped_session(sessionmaker(bind=engine))
try:
return handler()
except web.HTTPError:
web.ctx.orm.commit()
raise
except:
web.ctx.orm.rollback()
raise
finally:
web.ctx.orm.commit()
# If the above alone doesn't work, uncomment
# the following line:
#web.ctx.orm.expunge_all()
web.ctx.orm.close() # <=- 关闭session,或者用 .remove()

  

作者:QLeelulu Follow QLeelulu on Twitter
出处:http://QLeelulu.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利
posted on 2011-08-10 21:24 Q.Lee.lulu 阅读(551) 评论(0) 编辑 收藏
发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 2134206 3NwW6vf4bQE=
昵称: lulu
网名: QLeelulu
大学: GDUT
城市: 广州=>珠海
职业: 打字员
CO. : PowerEasy => KingSoft
Mail: QLeelulu@163(gmail).com

Who Am I ?


Follow QLeelulu on Twitter
交流群 ASP.NET MVC交流群:
QQ群:1215279(满)
2群:1214648(满)
3群:47788243
(加的时候请注明)



昵称:Q.Lee.lulu
园龄:4年4个月
荣誉:推荐博客
粉丝:322
关注:7
<2011年8月>
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910

搜索

 

常用链接

我的标签

随笔分类

随笔档案

.NET 资源

PowerEasy

我的好友

积分与排名

  • 积分 - 734675
  • 排名 - 65

最新评论

阅读排行榜

评论排行榜

推荐排行榜