2017-12-18 99 views
0

我一直在使用psycopg2來控制本地postgresql服務器在多模塊模型(我的博士論文)中。如何關閉psycopg2和postgresql之間的舊連接?

經過一段時間我在模型中出現錯誤,並且它保留了ghost連接,當我使用與postgresql服務器的新連接運行模型時,它引起了麻煩,它調用模型的其他模塊。

在我的電腦上同時顯示postgresql的多個連接,共十個。舊連接在屬性中有35天前的最後修改。

我卸載python,postgresql並刪除數據庫,之後我再次安裝一切,問題仍然存在。

如果有任何客人或幫助,我很感激。

回答

1

如果你是一個超級用戶,您可以關閉現有連接作爲答案here.

根據您的應用描述,你也可以看看修改應用程序如何連接到數據庫。創建一個名爲mydb.py的東西,如文件:

import psycopg2 
import psycopg2.pool 
from contextlib import contextmanager 

dbpool = psycopg2.pool.ThreadedConnectionPool(host=<<YourHost>>, 
              port=<<YourPort>>, 
              dbname=<<YourDB>>, 
              user=<<YourUser>>, 
              password=<<yourpassword>>, 
             ) 

@contextmanager 
def db_cursor(): 
    conn = dbpool.getconn() 
    try: 
     with conn.cursor() as cur: 
      yield cur 
      conn.commit() 
    except: 
     conn.rollback() 
     raise 
    finally: 
     dbpool.putconn(conn) 

那麼你的代碼可以使用:

import mydb 

def myfunction(): 
    with mydb.db_cursor() as cur: 
     cur.execute("""Select * from blahblahblah...""")