关于python 2.7:如何关闭psycopg2和postgresql之间的旧连接?

how to close a old connection between psycopg2 and postgresql?

我一直在使用psycopg2来控制多模块模型(我的博士论文)中的本地postgresql服务器。

一段时间后,我在模型中出现错误并且它保持了一个ghost连接,当我使用与postgresql服务器的新连接运行模型时,这会引起麻烦,它会调用模型的其他模块。

在我的计算机上同时显示postgresql的多个连接,总共十个。 较旧的连接在属性中具有35天前的最后修改。

我卸载了python,postgresql并删除了数据库,之后我又重新安装了一切,问题仍然存在。

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


如果您是超级用户,则可以按照此处的答案中所述关闭现有连接。

根据您的应用程序,您还可以查看修改应用程序连接到数据库的方式。 创建一个名为mydb.py的文件,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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)

然后您的代码可以使用:

1
2
3
4
5
import mydb

def myfunction():
    WITH mydb.db_cursor() AS cur:
        cur.execute("""Select * from blahblahblah...""")