1) Firstly, if I don't explicitly close my session object, will it
automatically close after the request has been processed?
垃圾收集器最终将*调用会话上的__del__。如果您没有以其他方式整理会话,这可能会导致回滚。你通常应该这样做:import contextlib
def myRequestHandler(args):
with contextlib.closing(DBSession()) as session:
result = do_stuff(session)
if neccesary:
session.commit()
else:
session.rollback()
return result2) When my app receives multiple requests, are the multiple session
objects being created all linked to the single engine object that was
created in my __init__.py file?
是的,^{}保留所有的Session配置。使用已有的模式,您将为每个请求获得一个新会话,这是一件好事。3) Are the session objects being created in view.py the connections
that the connection pool holds?
sessions and connections不是同一件事;尽管每个会话每次都使用一个连接,并且它们在使用完连接后将其连接返回到池。If so, and these weren't closed, then
would new connections have to be made for subsequent requests?
different pool implementations有不同的规则,但对于大多数数据库引擎,默认值是^{};默认的最大连接数为15。附加连接的子序列请求将阻塞或超时。不过,如果可能,可以重用连接。4) Should I be using dispose() at some point?
通常不会,如果您还使用池、引擎和会话,那么除了提交/回滚会话之外,可能不需要任何额外的资源管理
*最终实际上意味着从立即到永远之间的某个时间;不要指望它做有用的工作;请注意,当您的进程结束时,操作系统将强制关闭您的连接,因此使用GC进行连接管理不会给您带来任何好处。