是应该在django应用程序中只打开一次数据库连接,还是在views.py中为每个用户打开一次?

时间:2012-06-12 10:26:33

标签: django kyotocabinet

我正在研究我的第一个Django项目。

我需要连接到预先存在的键值存储(在本例中为Kyoto Tycoon),以完成一项任务。即我不是在谈论django使用的主要数据库。

目前,我有一些有用的东西,但我不知道我所做的事情是否合情合理。

views.py

from django.http import HttpResponse
from pykt import KyotoTycoon

def get_from_kv(user_input):

    kt=KyotoTycoon()
    kt.open('127.0.0.1',1978)

    # some code to define the required key
    # my_key = ...

    my_value = kt.get(my_key)

    kt.close()

    return HttpResponse(my_value)

即。每次用户进行查询时,它都会打开一个与数据库的新连接,然后在完成后再次关闭连接。

或者,这样的事情会更好吗?

views.py

from django.http import HttpResponse
from pykt import KyotoTycoon

kt=KyotoTycoon()
kt.open('127.0.0.1',1978)

def get_from_kv(user_input):

    # some code to define the required key
    # my_key = ...

    my_value = kt.get(my_key)

    return HttpResponse(my_value)

在第二种方法中,Django只会在首次启动应用程序时打开一次连接吗?即所有用户是否共享相同的连接?

哪种方法最好?

1 个答案:

答案 0 :(得分:1)

在需要时打开连接可能是更好的解决方案。否则,连接可能不再打开。因此,您需要测试连接是否仍处于打开状态,如果不是在继续之前再重新启动它。

这意味着您可以在上下文管理器块中运行查询,这会自动关闭您的连接,即使发生了无法处理的异常。

或者,您可以拥有一个连接池,只需抓取一个当前未使用的连接(我不知道在这种情况下这是否会出现问题)。

这一切都取决于创建连接的成本,以及能否重用它们是否有意义。