1、安装mysql.connector包

2、具体代码如下

# 使用mysql的连接池技术来提高性能
import mysql.connector
from mysql.connector import pooling

# 定义数据库连接参数
dbconfig = {
    "host": "localhost",
    "user": "root",
    "password": "123456",
    "database": "demo"
}
# 创建连接池
pool = pooling.MySQLConnectionPool(
    pool_name="mypool",
    pool_size=5,
    **dbconfig
)


def insert():
    # 定义插入语句
    new_employee = (
        'insert into employee(name,age,create_time) values(%s,%s,%s)')
    # 定义插入的数据
    employee1 = ('Tom', 18, '2018-01-01')
    employee2 = ('Jerry', 20, '2018-01-02')
    try:
        with pool.get_connection() as conn:
            conn = pool.get_connection()
            with conn.cursor() as cursor:
                # 执行插入语句
                cursor.execute(new_employee, employee1)
                cursor.execute(new_employee, employee2)
                # 提交事务
                conn.commit()
    except Exception as e:
        # 发生错误时回滚事务
        print(f'Error occurred:{e}')
        conn.rollback()
    else:
        # 插入成功时打印提示信息
        print('Insert successful')


if __name__ == '__main__':
    insert()

3、注意

  • 使用上下文管理器,通过 with 语句自动归还连接(无需手动调用 close()

  • 如果mysql配置了自动提交模式(autocommit=True),每个 SQL 语句会立即生效,无需手动提交或回滚

  • conn.close() 是否需要调用?必须调用。连接池的连接本质是“借用”:调用 conn.close() 并不会真正关闭连接,而是将其标记为空闲状态并归还到池中。不关闭的后果:连接会一直被占用,最终导致连接池耗尽(所有连接都在“使用中”状态)。

4、连接池技术的关键行为

操作

行为

pool.get_connection()

从池中获取一个空闲连接,若无空闲则等待(直到超时)。

conn.close()

将连接标记为空闲,归还到池中(非物理关闭)。

未调用 close()

连接永远被标记为“使用中”,导致连接池耗尽。