以下是一个 Python 连接 MySQL 的线程池封装类的示例代码,使用 Python 内置的线程池模块 concurrent.futures 来管理多个数据库连接。在类的初始化方法中,我们可以设置线程池的大小和数据库连接信息。在使用数据库连接时,我们可以使用 with 语句来获得一个连接对象,然后在 with 语句块中执行需要的操作。当 with 语句块结束时,连接对象会自动回收到线程池中,以供其他线程使用。

import mysql.connector
from mysql.connector import Error
from concurrent.futures import ThreadPoolExecutor


class MySQLPool:
    def __init__(self, pool_name, pool_size, **db_config):
        self.pool_name = pool_name
        self.pool_size = pool_size
        self.db_config = db_config
        self.pool = ThreadPoolExecutor(pool_size)
        self.connections = []

    def __del__(self):
        self.pool.shutdown(wait=False)

    def get_connection(self):
        try:
            connection = self.connections.pop()
        except IndexError:
            connection = mysql.connector.connect(**self.db_config)
        return connection

    def return_connection(self, connection):
        self.connections.append(connection)

    def execute(self, query, args=None):
        with self.pool.submit(self._execute, query, args) as future:
            return future.result()

    def _execute(self, query, args):
        connection = self.get_connection()
        try:
            cursor = connection.cursor()
            cursor.execute(query, args)
            result = cursor.fetchall()
            connection.commit()
        except Error as error:
            connection.rollback()
            raise error
        finally:
            cursor.close()
            self.return_connection(connection)
        return result

这个类的使用方法如下:

db_config = {
    'host': 'localhost',
    'user': 'root',
    'password': 'password',
    'database': 'test_db'
}

pool = MySQLPool('test_pool', 5, **db_config)

result = pool.execute('SELECT * FROM customers')
print(result)

在这个例子中,我们创建了名为 test_pool 的线程池,大小为 5。然后我们执行了一个查询操作,从名为 customers 的表中获取所有数据,并打印结果。注意,我们并没有显式地打开或关闭数据库连接,这些操作都是由 MySQLPool 类自动处理的。

Python MySQL 线程池封装类:高效数据库连接管理

原文地址: https://www.cveoy.top/t/topic/lAnR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录