如果我不关闭mysql连接并打开另一个连接,会发生什么?

时间:2016-06-20 21:30:42

标签: python mysql

cnx = mysql.connector.connect(user="root", password="pass", host="127.0.0.1", database="db")
cursor = cnx.cursor()
return cursor, cnx

假设我打开上述连接,并进行选择查询cursor.execute(selectquery)并使用cursor.fetchall()获取数据。

如果我不cnx.close()cursor.close()当我不断打开并选择此类查询时会发生什么?

连接是否会保持打开状态?或者有没有"垃圾巡逻"可以看到它没有被使用?

1 个答案:

答案 0 :(得分:3)

假设您正在重用相同的变量名,或者它超出范围(包含它的函数返回)而未显式关闭。最常见的python版本有引用计数, 应该检测到不再有任何方式来访问你的连接对象。所以最终应该关闭连接。但是python并不能保证这种行为,事实上(正如我暗示的那样)并不适用于所有python引擎。

现在假设您使用两个不同的变量来保存两个同时打开的连接。这完全合法,偶尔也有用。大多数情况下,您不会注意到任何奇怪的事情,但如果启用了事务并且您在不关闭或提交事务的情况下放弃了第一个连接,则此事务中的数据库更改将无法从另一个连接中看到。这就是交易的工作方式。

如果您不喜欢明确关闭的风格,可以使用with声明来保护连接:

with mysql.connector.connect(...) as cnx:
    cursor = cnx.cursor() 
    ...

一旦执行离开with块,无论采用何种途径,连接都将为您关闭。