何时关闭 MySQL 连接 discord.py

Posted

技术标签:

【中文标题】何时关闭 MySQL 连接 discord.py【英文标题】:When to close MySQL connection discord.py 【发布时间】:2021-09-26 03:20:56 【问题描述】:

我想制作一个不和谐的机器人,将数据保存到 mysql 数据库(当前为 localhost),但问题是我不知道何时关闭数据库连接。 目前,当用户输入命令时,它总是会创建一个与数据库的新连接,但正如您可以想象的那样,总是连接然后执行查询然后关闭连接,最后再返回数据之后会很慢。

这是一个例子:

def open_case(case_id):
        search_query = f"SELECT `CASE_ID`, `USER_ID`, `LINK_REASON`, `LINK_SCREENSHOT` FROM `Report` WHERE CASE_ID ='case_id'"`

        mydb = mysql.connector.connect(
            host = "localhost",
            database = "report",
            password = "root",
            username = "root"
        )

        cursor = mydb.cursor()
        try:
            cursor.execute(search_query)
            result = cursor.fetchall()
            mydb.close()

        return result
    except:
        return print("Error case not found")
        mydb.close()

但我担心如果我一开始就连接到数据库,机器人崩溃者左右,然后我就从来没有关闭到数据库的连接。 有没有办法让它变得更好?

【问题讨论】:

【参考方案1】:

每个连接都有一个空闲超时,它会检测到未使用的打开连接并关闭它。

但是你的方法非常好,干净,因为它关闭了连接

一个更简单的方法是添加finqally,因为所有的try catch 和ecept 都会运行它

在使用变量时也要使用准备好的语句

def open_case(case_id):
        search_query = "SELECT `CASE_ID`, `USER_ID`, `LINK_REASON`, `LINK_SCREENSHOT` FROM `Report` WHERE CASE_ID =%s"

        mydb = mysql.connector.connect(
            host = "localhost",
            database = "report",
            password = "root",
            username = "root"
        )

        cursor = mydb.cursor()
        try:
            cursor.execute(search_query,(case_id,))
            result = cursor.fetchall()
            return result      
        except:
            result = print("Error case not found")
        finally:
            mydb.close()
open_case(1)

【讨论】:

谢谢,但正如我所提到的,它非常缓慢。或者如果我不关闭它就崩溃了会有很大的问题 在我更改的答案中写了一个更好的方法,这也保证不会发生 sql 注入 谢谢,但是为什么 cursor.execute(search_query,(case_id,)) 中的 case_id 后面有一个 , 那是一个prepared statement,所以不能进行sql注入。请不要忘记upvote and accept the answer

以上是关于何时关闭 MySQL 连接 discord.py的主要内容,如果未能解决你的问题,请参考以下文章

Discord.py D&D 掷骰子命令有太多问题

何时使用 MySQLdb 关闭游标

何时使用 MongoDB [关闭]

boost::asio - 知道何时必须关闭/关闭连接

我应该何时打开和关闭与 SQL Server 的连接

http2 TCP 连接何时关闭?