Python中文
首页
教程
问答
标签
搜索
登录
注册
多线程sqlalchemy webapp中推荐的作用域会话使用模式是什么?
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我正在用python和sqlalchemy-0.7编写一个应用程序。它首先初始化sqlalchemy orm(使用声明式),然后启动一个多线程web服务器——我目前正在使用web.py进行快速原型设计,但这在未来可能会发生变化。我还将为计划的作业等添加其他“线程”,可能使用其他python线程。</p> <p>根据SA文档,我知道我必须使用scoped_session()来获取线程本地会话,因此我的web.py应用程序应该看起来像:</p> <pre><code>import web from myapp.model import Session # scoped_session(sessionmaker(bind=engine)) from myapp.model import This, That, AndSoOn urls = blah... app = web.application(urls, globals()) class index: def GET(self): s = Session() # get stuff done Session().remove() return(stuff) class foo: def GET(self): s = Session() # get stuff done Session().remove() return(stuff) </code></pre> <p>这是处理会议的正确方法吗?</p> <p>据我所知,我应该在每个方法上都得到一个作用域会话,因为它会给我一个事先无法获得的线程本地会话(比如在模块级)。</p> <p>另外,我应该在每个方法结束时调用.remove()或.commit()或<a href="http://www.sqlalchemy.org/docs/07/orm/session.html?highlight=scoped_session#lifespan-of-a-contextual-session" rel="noreferrer">something like them</a>,否则会话仍将包含<a href="http://www.sqlalchemy.org/docs/07/orm/session.html#quickie-intro-to-object-states" rel="noreferrer">Persistent</a>对象,并且我将无法在其他线程中查询/访问相同的对象?</p> <p>如果这个模式是正确的,那么只写一次,或者使用一个decorator,可能会使它变得更好?这样的decorator可以获取会话,调用方法,然后确保正确地释放会话。如何将会话传递给修饰函数?</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>如果为每个请求创建新会话,并且每个请求由单个线程处理,则不需要创建作用域会话。</p> <p>必须调用<code>s.commit()</code>使<em>挂起的</em>对象<em>持久化,即将更改保存到数据库中。</p> <p>您可能还想通过调用<code>s.close()</code>来关闭会话。</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
无法使用Django restfram生成PDF
2 回答
无法使用Django Rest框架发送压缩的gzip数据
10 回答
无法使用Django rest框架进行身份验证(请求用户=匿名用户)
5 回答
无法使用Django、Python和JavaScrip触发onclick函数
4 回答
无法使用Django.views.generic.View保存表单
10 回答
无法使用Django(python 2.7,OS X 10.11.1)
10 回答
无法使用Django/mongoengine连接到MongoDB(身份验证失败)
9 回答
无法使用Django\u mssql\u后端迁移到外部hos
2 回答
无法使用Django&Python3.4连接到MySql
4 回答
无法使用Django+nginx上载媒体文件
8 回答
无法使用Django1.6导入名称模式
7 回答
无法使用Django1.7和mongodb登录管理站点
7 回答
无法使用Djangoadmin创建项目,进程使用了错误的路径,因为我事先安装了错误的Python
8 回答
无法使用Djangockedi验证CBV中的字段
5 回答
无法使用Djangocketditor上载图像(错误400)
6 回答
无法使用Djangocron进行函数调用
10 回答
无法使用Djangofiler djang上载文件
10 回答
无法使用Djangokronos
6 回答
无法使用Djangomssql provid
6 回答
无法使用Djangomssql连接到带有Django 1.11的MS SQL Server 2016
2 回答