Jon*_*Ong 3 python sqlalchemy pyramid
所以我有一个渲染页面的控制器.在控制器中,我从模型中调用多个函数来创建自己的会话.例如:
def page(request):
userid = authenticated_userid(request)
user = User.get_by_id(userid)
things = User.get_things()
return {'user': user, 'things': things}
Run Code Online (Sandbox Code Playgroud)
我在模型中的位置:
class User:
...
def get_by_id(self, userid):
return DBSession.query(User)...
def get_things(self):
return DBSession.query(Thing)...
Run Code Online (Sandbox Code Playgroud)
我的问题是,是为每个函数最优创建一个新会话,还是应该在控制器中启动一个会话并在整个控制器中使用相同的会话(假设我既要查询也要插入控制器中的数据库)?防爆.
def page(request):
session = DBSession()
userid = authenticated_userid(request)
user = User.get_by_id(userid, session)
things = User.get_things(session)
...
return {'user': user, 'things': things}
class User:
...
def get_by_id(self, userid, session=None):
if not session:
session = DBSession()
return session.query(User)...
def get_things(self, session=None):
if not session:
session = DBSession()
return session.query(Thing)...
Run Code Online (Sandbox Code Playgroud)
你的第一个代码是好的,如果你DBSession是ScopedSession.DBSession()那么它不是构造函数,而只是线程局部存储的访问器函数.你可以通过明确地传递会话来加速一些事情,但过早的优化是万恶之源.
| 归档时间: |
|
| 查看次数: |
1304 次 |
| 最近记录: |