问题描述
我只是有一个问题,如何理解类中的游标和连接。 一切工作正常,但我不理解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()
<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()仅打印连接和游标对象,即您在输出中看到的结果。
所以我的问题:
- 为什么此调用会生成新对象? -还是他们,我的意思是那里有新的内存地址
- 关闭连接和游标是正确的方法吗?
- 此调用将处于等待功能,是否有可能让连接打开并检查它们是否仍然有效? -如果连接仍然打开但无法创建新的连接,是否会像if和exception那样关闭,或者是否有可能不仅检查其是否仍然打开也可以工作……或者Im完全错误那意味着它是否可以打开?
- 为什么游标和连接有不同的close返回值?
- 是否创建了新的连接/光标对象,或者为什么它是新的内存地址?这样做是正确的方法(问题3)吗?
谢谢大家...我只是想了解一下,因为它可以工作,但是我尝试学习编写简洁的代码:D
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)