Python有GC,使用pymysql时还需要主动关闭连接吗?

学习 Python 的时候,别人都会说使用 pymysql 访问 MySQL 需要显示地主动关闭连接,否则数据库连接会慢慢增多,代码应该这样写,

import pymysql

conn = pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='12345',
    database='demo',
    charset='utf8'
)
cursor = conn.cursor()
cursor.execute('select * from user')
res = cursor.fetchone()
print(res)
# 显示主动关闭
cursor.close()
conn.close()

或者使用上下文的方式,代码这样写(with会帮忙关闭),

import pymysql

conn = pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='12345',
    database='demo',
    charset='utf8'
)
with conn:
    with conn.cursor() as cursor:
        cursor.execute('select * from user')
        res = cursor.fetchone()
        print(res)

但是,我就想看看如果不关闭连接,数据库中的连接数会不会增多,于是写出了下面的代码。然后,我发现数据库的连接并不会随着代码运行次数的增加而增加,经过测试和思考,我发现这是因为Python中的GC,程序结束后会自动回收这些变量(连接)。那我的疑问就来了,还需要主动关闭连接吗,或者有哪些场景需要我们主动关闭连接?

import pymysql

conn = pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='12345',
    database='demo',
    charset='utf8'
)
cursor = conn.cursor()
cursor.execute('select * from user')
res = cursor.fetchone()
print(res)
讨论数量: 2
Jason990420

如果数据库连接未正确关闭,可能会导致许多问题。 一些最常见的问题包括:

资源泄漏:如果一个连接没有关闭,就会持续消耗服务器上的资源,比如内存和CPU。 这可能会导致服务器性能问题,并最终导致服务器崩溃。

并发访问:如果对同一数据库打开多个连接,可能会导致冲突和数据损坏。

死锁:如果多个连接尝试同时访问相同的数据,则可能会导致死锁,即所有连接都无法取得进展。

为了避免这些问题,确保所有数据库连接在不再需要时正确关闭非常重要。

7个月前 评论

你最后一段代码导致整个程序运行结束,与MySQL的链接自动就断开了。你试试把这个变成循环然后阻塞住再看看

6个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!