Psycopg2连接和类中的游标是否关闭?我应该关闭它们吗?

问题描述

我只是有一个问题,如何理解类中的游标和连接。 一切工作正常,但我不理解python如何处理连接和游标...

我有一个数据库交互的类。在插入方法中,我还放置了一个“ check_connection”方法,该方法仅打印光标和连接对象。

但是我在使用insert方法后将它们关闭。之后,当我调用“ check_connection”对象时,我的类对象会在同一位置返回对象。我再次调用insert方法时会创建新对象吗?

插入方法

def insert_new_join(self,user,invitedby):
        try:
            timest = dt.Now().strftime('%Y-%m-%d %H:%M:%s')
            query = """ INSERT INTO user_invites (username,invitedby,dates) VALUES (%s,%s,%s) ON CONFLICT DO nothing"""
            values = (user,timest,)

            self.connect()
            self.cursor.execute(query,values)
            self.con.commit()
            self.check_connection()
            return True

        except (Exception,psy.Error) as e :
            with open("errorlog.txt",'a') as f:
                f.write("db insert_new_join: "+dt.Now().strftime('%Y-%m-%d %H:%M:%s')+" "+str(e)+"\n")
            return False
        finally:
           self.disconnect()

断开连接的方法

def disconnect(self):
        if(self.cursor):
            self.cursor.close()
            print("Postgresql cursor is closed")
        if(self.con):
            self.con.close()
            print("Postgresql connection is closed")

Mytest文件

testdb = dbs.user_db(*getc.get_database_login())
testdb.insert_new_join("test","test")
testdb.check_connection()
print("\nnew insert - methode call\n")
testdb.insert_new_join("test","test")
testdb.check_connection()

那是我的输出(“ xxx”是我的数据库连接,通常填充):

<connection object at 0x000001B442496D00; dsn: 'xxx',closed: 0>
<cursor object at 0x000001B442223900; closed: 0>
Postgresql cursor is closed
Postgresql connection is closed
<connection object at 0x000001B442496D00; dsn: 'xxx',closed: 1>
<cursor object at 0x000001B442223900; closed: -1>

new insert - methode call

<connection object at 0x000001B44253F040; dsn: 'xxx',closed: 0>
<cursor object at 0x000001B442223740; closed: 0>
Postgresql cursor is closed
Postgresql connection is closed
<connection object at 0x000001B44253F040; dsn: 'xxx',closed: 1>
<cursor object at 0x000001B442223740; closed: -1>

* self.connect()使用以下命令启动连接:psycopg2.connect()和check_connection()仅打印连接和游标对象,即您在输出中看到的结果。

所以我的问题:

  1. 为什么此调用生成新对象? -还是他们,我的意思是那里有新的内存地址
  2. 关闭连接和游标是正确的方法吗?
  3. 调用将处于等待功能,是否有可能让连接打开并检查它们是否仍然有效? -如果连接仍然打开但无法创建新的连接,是否会像if和exception那样关闭,或者是否有可能不仅检查其是否仍然打开也可以工作……或者Im完全错误那意味着它是否可以打开?
  4. 为什么游标和连接有不同的close返回值?
  5. 是否创建了新的连接/光标对象,或者为什么它是新的内存地址?这样做是正确的方法(问题3)吗?

谢谢大家...我只是想了解一下,因为它可以工作,但是我尝试学习编写简洁的代码:D

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...