我正在研究我的第一个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只会在首次启动应用程序时打开一次连接吗?即所有用户是否共享相同的连接?
哪种方法最好?
答案 0 :(得分:1)
在需要时打开连接可能是更好的解决方案。否则,连接可能不再打开。因此,您需要测试连接是否仍处于打开状态,如果不是在继续之前再重新启动它。
这意味着您可以在上下文管理器块中运行查询,这会自动关闭您的连接,即使发生了无法处理的异常。
或者,您可以拥有一个连接池,只需抓取一个当前未使用的连接(我不知道在这种情况下这是否会出现问题)。
这一切都取决于创建连接的成本,以及能否重用它们是否有意义。