一、前言

在现代应用程序中,数据库是核心数据存储组件。MySQL 是最流行的开源关系型数据库管理系统(RDBMS),Python 可通过专用连接库与 MySQL 交互,实现数据的增删改查;同时连接池是高并发场景下优化数据库连接管理的关键技术,能大幅提升应用性能。

本笔记完整覆盖:环境安装、基础连接、CRUD 操作、连接池优化、事务管理、隔离级别等核心知识点,可直接用于学习、开发和面试备考。

二、环境准备:安装 Python MySQL 连接库

Python 操作 MySQL 需要依赖第三方连接库,主流有两种方案:

1. 官方推荐库:mysql-connector-python

  • 安装命令:

pip install mysql-connector-python

2. 第三方替代库:PyMySQL(本笔记示例采用)

  • 安装命令:

pip install pymysql

三、Python 连接 MySQL 数据库 基础流程

1. 核心步骤总览

  1. 导入连接库

  2. 创建数据库连接

  3. 创建游标对象(执行 SQL 的载体)

  4. 执行 SQL 语句

  5. 获取 / 处理查询结果

  6. 关闭游标与数据库连接

2. 完整基础代码

python

# 1. 导入连接库
import pymysql
​
# 2. 创建数据库连接
db = pymysql.connect(
    host="localhost",      # MySQL 服务器地址,本地为 localhost,远程填 IP
    user="root",           # 数据库用户名,默认 root
    password="password",   # 数据库密码
    database="testdb"      # 要连接的目标数据库名
)
​
# 3. 创建游标对象
cursor = db.cursor()
​
# 4. 执行 SQL 语句(示例:查询 users 表所有数据)
cursor.execute("SELECT * FROM users")
​
# 5. 获取查询结果
# fetchall():获取所有结果;fetchone():获取单条记录
results = cursor.fetchall()
for row in results:
    print(row)
​
# 6. 关闭连接(必须执行,避免资源泄漏)
cursor.close()
db.close()

四、常见 MySQL 操作(CRUD)

核心注意事项

  • 写操作(增 / 改 / 删)必须执行 db.commit() 提交事务,否则数据不会真正写入数据库;

  • 所有参数化查询使用 %s 占位符,禁止字符串拼接 SQL,避免 SQL 注入攻击。

1. 插入数据(INSERT)

python

# 单条插入
cursor.execute(
    "INSERT INTO users (name, age) VALUES (%s, %s)",
    ("Alice", 25)
)
db.commit()  # 提交事务,保存数据
​
# 批量插入(使用 executemany 提升效率)
data = [("Bob", 30), ("Charlie", 35), ("David", 28)]
cursor.executemany(
    "INSERT INTO users (name, age) VALUES (%s, %s)",
    data
)
db.commit()

2. 更新数据(UPDATE)

python

cursor.execute(
    "UPDATE users SET age = %s WHERE name = %s",
    (26, "Alice")
)
db.commit()

3. 删除数据(DELETE)

python

cursor.execute(
    "DELETE FROM users WHERE name = %s",
    ("Alice",)  # 单元素元组必须加逗号
)
db.commit()

4. 查询数据(SELECT)

python

# 全表查询
cursor.execute("SELECT * FROM users")
results = cursor.fetchall()
for row in results:
    print(row)
​
# 条件查询
cursor.execute("SELECT * FROM users WHERE age > %s", (25,))
results = cursor.fetchall()

5. 高级查询

(1)模糊查询(LIKE)

使用 % 通配符匹配任意字符:

python

# 查询 name 包含字母 a 的所有用户
cursor.execute(
    "SELECT * FROM users WHERE name LIKE %s",
    ("%a%",)
)
results = cursor.fetchall()
(2)联合查询(JOIN)

多表关联查询,示例:users 表与 orders 表内连接:

python

cursor.execute("""
    SELECT users.name, orders.amount
    FROM users
    INNER JOIN orders ON users.id = orders.user_id
""")
results = cursor.fetchall()
for row in results:
    print(row)

五、连接池优化:DBUtils 实现高并发连接管理

1. 连接池核心原理

  • 传统方式:每次请求都新建 / 销毁数据库连接,开销极大,高并发下性能骤降;

  • 连接池:提前创建一批连接放入池中,请求时直接从池获取,用完归还,大幅减少连接创建 / 销毁开销,同时限制最大连接数,避免数据库过载。

2. 环境准备

PyMySQL 不原生支持连接池,需安装 DBUtils 库:

bash

pip install dbutils

3. 完整连接池实现代码

python

from dbutils.pooled_db import PooledDB
import pymysql
​
# 1. 数据库连接配置
dbconfig = {
    "host": "localhost",
    "user": "root",
    "password": "password",
    "database": "testdb"
}
​
# 2. 创建连接池
connection_pool = PooledDB(
    creator=pymysql,       # 指定连接库为 PyMySQL
    maxconnections=5,       # 连接池最大连接数,根据业务调整
    **dbconfig              # 传入连接配置
)
​
# 3. 从连接池获取连接、执行操作
# 获取连接
db_connection = connection_pool.connection()
cursor = db_connection.cursor()
​
# 执行SQL(示例:查询数据)
cursor.execute("SELECT * FROM users")
results = cursor.fetchall()
for row in results:
    print(row)
​
# 4. 关闭游标与连接(连接会自动归还到池,无需手动销毁)
cursor.close()
db_connection.close()

4. 连接池核心优势

优势 说明
性能提升 减少连接创建 / 销毁的系统开销,高并发下性能提升显著
资源管控 限制最大连接数,避免过多连接导致数据库崩溃
简化管理 统一管理连接生命周期,代码结构更清晰,减少资源泄漏风险

六、事务管理

1. 事务核心概念

事务是由多个 SQL 组成的工作单元,保证数据的原子性:所有操作要么全部成功,要么全部失败,避免数据不一致。

2. 事务核心操作

python

# 1. 开启事务(可显式执行,默认执行SQL即自动开启)
cursor.execute("START TRANSACTION")
​
# 2. 执行事务内SQL(示例:转账操作)
cursor.execute("UPDATE account SET balance = balance - 100 WHERE user = %s", ("A",))
cursor.execute("UPDATE account SET balance = balance + 100 WHERE user = %s", ("B",))
​
# 3. 提交事务:所有操作成功,永久保存修改
db.commit()
​
# 4. 回滚事务:操作失败,撤销所有修改
# db.rollback()

3. 事务四大特性(ACID)

  • 原子性(Atomicity):事务是不可分割的最小单位,全成或全败;

  • 一致性(Consistency):事务执行前后,数据库完整性约束不变;

  • 隔离性(Isolation):多个事务并发执行时,互不干扰;

  • 持久性(Durability):事务提交后,数据永久写入数据库,不会回滚。

七、事务隔离级别

MySQL 支持 4 种事务隔离级别,隔离性越高,数据一致性越好,但性能越低。MySQL 默认隔离级别为 REPEATABLE READ

1. 四种隔离级别详细对比

隔离级别 英文名称 核心描述 解决的问题 存在的问题 适用场景 Python 设置命令
未提交读 READ UNCOMMITTED 可读取其他事务未提交的数据 脏读、不可重复读、幻读 数据一致性要求极低的场景(几乎不推荐) cursor.execute("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED")
提交读 READ COMMITTED 仅读取其他事务已提交的数据 脏读 不可重复读、幻读 大多数普通业务场景,平衡一致性与性能 cursor.execute("SET TRANSACTION ISOLATION LEVEL READ COMMITTED")
可重复读 REPEATABLE READ 事务内多次读取同一数据,值保持不变 脏读、不可重复读 幻读 MySQL 默认级别,适用于金融、余额等一致性要求高的场景 cursor.execute("SET TRANSACTION ISOLATION LEVEL REPEATABLE READ")
串行化 SERIALIZABLE 事务完全串行执行,完全隔离 脏读、不可重复读、幻读 性能开销极大,锁竞争严重 数据一致性要求极高的场景(如银行转账、库存管理) cursor.execute("SET TRANSACTION ISOLATION LEVEL SERIALIZABLE")

2. 三个并发问题定义

  • 脏读:一个事务读取了另一个事务未提交的数据,若该事务回滚,读取的数据无效;

  • 不可重复读:同一事务内,两次读取同一数据,结果不一致(其他事务提交了修改);

  • 幻读:同一事务内,两次执行相同范围查询,结果集行数不一致(其他事务插入 / 删除了数据)。

八、完整实战示例:带异常处理的数据库操作

生产环境必须添加异常处理,避免程序崩溃:

python

import pymysql
from dbutils.pooled_db import PooledDB
​
# 1. 初始化连接池
dbconfig = {
    "host": "localhost",
    "user": "root",
    "password": "password",
    "database": "testdb"
}
pool = PooledDB(creator=pymysql, maxconnections=5, **dbconfig)
​
def db_operation():
    conn = None
    cursor = None
    try:
        # 从连接池获取连接
        conn = pool.connection()
        cursor = conn.cursor()
        
        # 开启事务
        conn.begin()
        
        # 执行操作:插入数据
        cursor.execute(
            "INSERT INTO users (name, age) VALUES (%s, %s)",
            ("Tom", 28)
        )
        
        # 提交事务
        conn.commit()
        print("操作成功")
        
    except Exception as e:
        # 异常回滚
        if conn:
            conn.rollback()
        print(f"操作失败: {str(e)}")
    finally:
        # 关闭资源
        if cursor:
            cursor.close()
        if conn:
            conn.close()  # 归还连接到池
​
if __name__ == "__main__":
    db_operation()

九、总结

Python 操作 MySQL 主要使用 PyMySQL 库,流程为连接数据库、创建游标、执行 SQL 并关闭连接,增删改需 commit 提交事务,异常时 rollback 回滚保证数据安全,使用 % s 占位符防止 SQL 注入,批量操作用 executemany 提高效率,高并发场景用连接池复用连接、减少开销,事务具有 ACID 特性,MySQL 默认隔离级别为可重复读,代码中要捕获异常并关闭连接,避免资源泄漏。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐