gpt4 book ai didi

python - 在同一个 Controller 中有多个 SQLAlchemy session 可以吗,还是我应该将它们全部放在一个 session 中?

转载 作者:太空宇宙 更新时间:2023-11-03 13:51:29 27 4
gpt4 key购买 nike

所以我有一个呈现页面的 Controller 。在 Controller 中,我从创建自己的 session 的模型中调用多个函数。例如:

def page(request):
userid = authenticated_userid(request)
user = User.get_by_id(userid)
things = User.get_things()

return {'user': user, 'things': things}

我在模型中的位置:

class User:
...

def get_by_id(self, userid):
return DBSession.query(User)...

def get_things(self):
return DBSession.query(Thing)...

我的问题是,是为每个函数创建一个新 session 是最优的,还是我应该在 Controller 中启动一个 session 并在整个 Controller 中使用相同的 session (假设我既要查询又要插入数据库中的 Controller )?例如。

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)...

最佳答案

如果您的 DBSessionScopedSession,您的第一个代码就可以了。 DBSession() 不是构造函数,而只是线程本地存储的访问函数。您可能会通过显式传递 session 来加快速度,但过早的优化是万恶之源。

关于python - 在同一个 Controller 中有多个 SQLAlchemy session 可以吗,还是我应该将它们全部放在一个 session 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7950716/

27 4 0