2017-10-09 206 views
0

我試着用peewee實現一個簡單的模型。因爲我想重用做查詢常常不同的上下文中的功能,我想確保我的數據庫連接打開和使用堆棧這樣關閉只有1次爲任何呼叫:然後peewee db.close()不按預期方式工作

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() 

兩次調用之間,它工作正常。

在我看來,這應該完全沒有區別。已經通過在finally的disconnect()中加入睡眠來檢查它是否是一個計時問題;同樣的行爲。有沒有人有一個想法,如果這確實是一個peewee問題或我的代碼有問題?

回答

0

如果在connect()步驟之前隱式執行查詢,則peewee將已經打開連接。

我會檢查你可能在連接/關閉包裝的範圍之外執行查詢的位置。

+0

嗯,這個東西是get_something()的第一個調用按預期工作,但如果我立即再次調用get_something(),它會失敗。所以除了這兩個調用之外,不應該有任何查詢。 –