我尝试使用peewee实现一个简单的模型。由于我想重用在不同上下文中经常进行查询的函数,我想确保与我的数据库的连接只使用一次这样的堆栈打开和关闭一次:
connected = 0
def connect():
global connected
if connected == 0:
db.connect()
connected +=1
def disconnect():
global connected
if connected == 0:
raise ... # should not happen
if connected == 1:
db.close()
connected -= 1
我的功能如下:
def get_something():
try:
connect()
# execute query
finally:
disconnect()
然而,第二次调用该函数时,peewee抱怨连接已经打开。我完全确定db.close()被正确调用。有趣的是,如果我手动添加
connected += 1
disconnect()
两次通话之间,它运作正常。
在我看来,这绝对没有区别。已经通过向最终的disconnect()添加sleep来检查它是否是时间问题;同样的行为。有没有人知道这确实是一个小便问题还是我的代码有问题?
答案 0 :(得分:1)
如果你在connect()步骤之前隐式执行一个查询,那么peewee就已经打开了一个连接。
我会检查你在连接/关闭包装器范围之外执行查询的位置。