当前位置: 首页 > 知识库问答 >
问题:

PostgreSQL Python:关闭连接

毕黎昕
2023-03-14

我在Python中制作了一个游戏服务器,它使用心理学2连接到PostgreSQL数据库。我看到的例子,我看到当一个连接到一个数据库被创建,应该关闭连接时完成查询,例如每个客户端:

#create connection to db
con = psycopg2.connect (database = 'testdb', user = 'janbodnar')
cur = con.cursor ()
#process query
.
.
.
#close connection
con.close ()

好的,当我启动服务器时,我有:

在我的课堂里

def __init __ (self):
      #create connection to db
      con = psycopg2.connect (database = 'testdb', user = 'janbodnar')
      cur = con.cursor ()

# to all customers ...
def query(self):
      #process query, for example ...
      cur.execute ("DROP TABLE IF EXISTS Cars")
      #the connection never closes

也就是说,我对来自所有客户的所有查询使用相同的连接对象,并且从不关闭连接,这看起来比为每个客户打开和关闭连接要好,我的服务器显然工作得很好。你想到这个了吗?这个做得好吗?不做?。非常感谢。

共有3个答案

周子平
2023-03-14

我认为答案很简单:只要同时连接的客户端总数不超过您的postgres服务的max\u connections设置,您就可以了。否则,无法接受新连接。

相威
2023-03-14

这可能行得通,但并不好。问题:如何设置会话的日期时间格式?如何处理交易?临时桌子?如何处理错误?另请参阅:如何使用CPIPCOG和G活动共享连接?

对于这种情况,可以使用连接池。这样,当您开始使用新客户端(新网络连接)时,您可以从池中获得db连接。使用它而不是关闭连接后,释放它,它将返回池。现在它可以被其他线程使用。

如果您的连接以某种方式断开,它可能会简单地关闭,而不是返回池。每个线程都可以使用事务,您可以更改会话设置,如datetime格式。

我看到有http://initd.org/psycopg/docs/pool.html

PS在您的方法中,您应该使用self.conself.cur

汪理
2023-03-14

@谢谢你的回答,谢谢你的更正self.con和self.cur,我忘了写“self”。

我澄清我对服务器和数据库知之甚少。

我打算这样做:

我的服务器为每个用户处理“线程”单独的进程,然后在每个单独的进程中,为客户查询打开一个连接,然后关闭此连接,类似这样:

在我的课堂上:如果来自client1的新请求。。。此客户端的“线程”,然后,查询运行。。。

def query (self):
       #create connection to db for client1
       con = psycopg2.connect (database = 'testdb', user = 'janbodnar')
       cur = con.cursor ()
       #process query for client1, for example ...
       cur.execute ("DROP TABLE IF EXISTS Cars")
       #close connection for this client
       con.close ()

他们是怎么想的?我觉得好多了。我感谢你的建议和支持。

 类似资料:
  • 我使用weblogic应用服务器和oracle数据库。我使用jdbc与oracle数据库通信。我从weblogic数据源获得连接,并向表中插入一条记录。问题是,当我想关闭连接(插入数据库后)时,我会遇到一个异常(连接已经关闭)。这是我的代码: 但是联系。close语句引发异常: 我试图避免连接。close语句(因为我教过连接是自动关闭的!!但过了一段时间,所有的连接都打开了,因此引发了一个异常)

  • 嗨,我只知道这是一个古老的问题,但今天只是好奇。正如我们所知connection.close也会关闭preared语句(如果我错了请纠正我)。但是如果我关闭连接然后关闭preared语句会怎样 我会得到一个空指针异常吗? 有人说这取决于jvm的速度。有时,ps.close()会在conn.close完成其工作之前运行并首先关闭,因此您不会得到null指针。 为了测试它,我修改了代码 但是我没有得到

  • 问题内容: 我想使用OkHttpClient加载URL,如果给定URL的网站以pdf内容类型响应,我将继续下载PDF,否则我想忽略响应。 我的问题是,我是否需要做一些特殊的事情来关闭请求/响应,或者如果我选择不读取响应字节流,是否需要做任何事情来表明我将不使用响应?如果没有,OkHttpClient何时关闭连接? 问题答案: 调用将释放响应所拥有的所有资源。连接池将使连接保持打开状态,但是如果未使

  • 关闭连接标志着服务器和客户端之间的通信结束。使用事件可以关闭连接,标记通信结束后,服务器和客户端之间无法进一步传输消息。由于连接不良,也可能发生事件。 方法代表再见握手。它终止连接,除非连接再次打开,否则不能交换任何数据。 与前面的示例类似,当用户单击第二个按钮时,调用方法。 也可以传递前面提到的代码和原因说明参数,如下所示。 以下代码完整概述了如何关闭或断开Web Socket连接 - 在浏览器

  • 给出错误的方法如下: 如何创建一个没有泄漏的连接?为什么Hikari认为我的conn.close()方法没有关闭连接?任何想法都很欣赏。

  • 我想使用OkHttpClient加载一个url,如果给定url的网站以pdf内容类型响应,我将继续下载pdf,否则我想忽略响应。 我的问题是,我是否需要做任何特别的事情来关闭请求/响应,或者我是否需要做任何事情来表明如果我选择不读取响应字流,我将不会使用响应?如果没有,OkHttpClient何时关闭连接?

  • 问题内容: 我一直在对我们的一个宠物项目进行代码审查(通常使用诸如FindBugs之类的工具),并且FindBugs将以下代码标记为错误的(伪代码): 错误是此代码可能不会释放资源。我发现ResultSet和Statement没有关闭,所以我最终将它们关闭: 但是我在许多项目(来自许多公司)中遇到了上述模式,没有人关闭ResultSets或Statements。 关闭连接时,是否关闭了Result

  • 我使用Java应用程序前端与MySQL 5.6服务器上的数据库进行连接和交互。使用MySQL的JDBC连接器时,我遇到了连接到服务器的问题,当连接失败时,服务器没有关闭。调用close()。但当应用程序关闭时,所有连接都会断开。下面是用于进行查询的dao类。 接下来的代码是使用数据库验证应用程序用户的方法。有一些System.out.println()语句在整个过程中跟踪con变量。 运行该方法的