python - 如何使用自定义连接器正确终止 Django 中的 MySQL/MariaDB 连接

标签 python mysql django mariadb

我目前正在处理一个项目,我使用 MariaDB 连接器来运行查询。
我不能使用 ORM,所以我必须使用原始查询。
一般来说,系统运行正常,正如预期的那样,但是当我进行一些“大”查询时,我得到了 Too many connections错误信息。
对于 MySQL 和 MariaDB 连接器,这都发生在我身上,但我主要使用 MariaDB。
我的代码示例(截断/简化):

import mariadb

def get_cursor():
    conn = mariadb.connect(
    user="user",
    password="pass",
    host="localhost",
    database="db")
    return conn, conn.cursor(named_tuple=True)

def get_duplicated_variants():
    results = []
    conn_cursor  = get_cursor()
    cursor = conn_cursor[1]
    conn = conn_cursor[0]
    try:
        cursor.execute("SELECT * FROM `db`.s_data;")
        columns = [column[0] for column in cursor.description]
        results = []
        for row in cursor.fetchall():
            results.append(dict(zip(columns, row)))
        cursor.close()
        conn.close()
        return results
    except mariadb.Error as e:
        print(f"Error: {e}")
我试过的:show status like '%onn%'; enter image description here
还有:show variables like 'max_connections'; enter image description here
所以max_used_connections = 152我有 2503 Connections .
我还尝试执行以下查询:
SELECT 
CONCAT('KILL ', id, ';') 
FROM INFORMATION_SCHEMA.PROCESSLIST 
WHERE `User` = 'user' 
AND `Host` = 'localhost'
AND `db` = 'db';
this question 中所见.
但是运行查询后连接数是一样的,不行。
我怎样才能正确关闭连接?
我不明白为什么连接仍然有效,因为我同时使用了 cursor.close()关闭光标和 conn.close()关闭连接,但连接显然仍处于事件状态。
我知道我可以增加max_connections类似:set global max_connections = 500;但我想在查询完成后关闭来自后端的连接。
任何的想法?

最佳答案

API 位于 here对于连接 close() 肯定很清楚连接已关闭。
我知道您说您截断了代码,但是在单个程序中看到您对 2,503 个连接的评论肯定会让您看起来没有共享该连接并且正在为每个查询创建新连接。我建议您检查未包含的代码,以确保您正确存储和重用该连接,而继续重新创建的成本将很高。
最后,我会用类似 netstat 的东西查看状态表。查看哪些连接真正进行以及它们来自/来自哪里。我并不完全清楚您是否排除了可能来自其他实体到/来自数据库的连接,或者连接实际上并没有被破坏。简而言之,我有点不确定您是否在这里追逐红鲱鱼。我仍然认为> 2000 个连接似乎是出乎意料的,您应该首先根据您提供的代码追查为什么会创建这么多连接。

关于python - 如何使用自定义连接器正确终止 Django 中的 MySQL/MariaDB 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68191265/

相关文章:

python - OpenERP 7 登录流程

python - 当文档发送到群聊时让 Telegram Bot 使用react

python - 如何通过复制将一维数组转换为二维数组

javascript - 每次加载第二个数组时图表都会更新 : Highcharts, Javascript

php - 如何在帖子表中显示流行的标签(#)?

python - 动态 ChoiceField 无法在表单中进行验证

django - 序列化 django rest 框架时的附加字段

python - Spacy 导入错误出 Undefined Symbol

python - Django Rest Framework - 按日期时间过滤

MySQL语法错误;检查与您的 MySQL 服务器版本对应的手册,了解在第 4 行 ')' 附近使用的正确语法