我正在编写一个连接到数据库的web应用程序。我目前正在一个模块中使用一个从其他模块导入的变量,但这感觉很糟糕。在
# server.py
from hexapoda.application import application
if __name__ == '__main__':
from paste import httpserver
httpserver.serve(application, host='127.0.0.1', port='1337')
# hexapoda/tickets/controllers.py
from hexapoda.application import db
def index(request, params):
tickets = db.query(Ticket)
问题是我得到了到数据库的多个连接(我想因为我在两个不同的模块中导入application.py
,所以Session.connect()
函数执行了两次)。在
如何在不创建多个连接的情况下从多个模块访问db
(即在整个应用程序中只调用Session.connect()
)?在
尝试使用以下内容的Twisted框架:
这可能不是你想做的-每个应用程序只有一个连接意味着你的应用程序无法扩展。在
通常的解决方案是在请求进来时连接到数据库,并将该连接存储在一个具有“request”作用域的变量中(即它与请求一样长)。在
实现这一点的一个简单方法是将其放入
request
:您的web框架可能提供了一种方法来注释方法,或者类似于一个可以看到所有请求的过滤器。在那里输入打开/关闭连接的代码。在
如果打开连接很昂贵,请使用连接池。在
相关问题 更多 >
编程相关推荐