【问题标题】:How to properly close MariaDB and MySQL connections when using both connectors within a project在项目中使用两个连接器时如何正确关闭 MariaDB 和 MySQL 连接
【发布时间】:2021-08-30 02:54:34
【问题描述】:

我目前正在从事一个项目,其中大约有 100 个函数负责对 D B。根据代码是在本地服务器上还是在临时服务器上,将使用一个连接器或另一个(MySQL 或 MariaDB)。

为此,我实现了 get_cursor() 函数,该函数返回每个案例的光标。

关键是,据我所知,这不是一个好习惯,因为我必须在查询完成后关闭连接。

def get_cursor():
        #MariaDB cursor for Django
    if 'local' == settings.DJANGO_HOST:
        conn = mariadb.connect(
        user="user",
        password="password",
        host="localhost",
        database="db-dummy")
        return conn.cursor(named_tuple=True)
    else:
        #Default Django MySQL cursor
        return connection.cursor()  

#MariaDB connector
def get_some_data_mariadb(record_id):
    results = []
    cursor  = get_cursor()
    try:
        cursor.execute("SELECT blabla some query")
        columns = [column[0] for column in cursor.description]
        results = []
        for row in cursor.fetchall():
            results.append(dict(zip(columns, row)))
        return results
    except mariadb.Error as e:
        print(f"Error: {e}")


#MySQL connector
def get_some_data_mysql(record_id):
    results = []
    cursor  = get_cursor()
    cursor.execute("SELECT blablabla")
    columns = [column[0] for column in cursor.description]
    results = []
    for row in cursor.fetchall():
        results.append(dict(zip(columns, row)))
    return results

现在的代码可以运行,但是如果我进行大量查询,我会收到以下错误:

OperationalError at /selected-interpretation/
Too many connections
Request Method: POST
Request URL:    http://127.0.0.1:8000/selected-interpretation/
Django Version: 2.2.6
Exception Type: OperationalError
Exception Value:    
Too many connections
Exception Location: /Users/user/Developer/project/subfolder/db.py in get_cursor, line 22
Python Executable:  /Users/user/.virtualenvs/project/bin/python
Python Version: 3.9.4
Python Path:    
['/Users/user/Developer/project',
 '/usr/local/Cellar/python@3.9/3.9.4/Frameworks/Python.framework/Versions/3.9/lib/python39.zip',
 '/usr/local/Cellar/python@3.9/3.9.4/Frameworks/Python.framework/Versions/3.9/lib/python3.9',
 '/usr/local/Cellar/python@3.9/3.9.4/Frameworks/Python.framework/Versions/3.9/lib/python3.9/lib-dynload',
 '/Users/user/.virtualenvs/project/lib/python3.9/site-packages']
Server time:    Mon, 14 Jun 2021 16:13:30 +0900

有没有办法可以关闭get_cursor() 之外的连接?

【问题讨论】:

  • 您看过Multiple databases 上的文档吗?更何况你为什么不简单地根据本地/登台服务器使用不同的设置文件?
  • @AbdulAzizBarkat 感谢您的见解,是的,我查看了官方文档,但由于我使用的是 MariaDB 的自定义连接器,因此没有太多关于它的信息。我根据本地/登台服务器使用不同的设置。我只想知道如何使用上述逻辑正确关闭连接。我是否应该在 get_cursor 的返回中也发送连接?

标签: python mysql django mariadb


【解决方案1】:

在你的程序中

  • 连接到两台服务器中的每台服务器一次。 (这可能是真正的问题。)
  • 保持这种“联系”,这样您就可以...
  • 在程序结束断开连接。

【讨论】:

    猜你喜欢
    • 2021-09-12
    • 2018-06-21
    • 2018-02-14
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2018-12-11
    相关资源
    最近更新 更多