Python操作MySQL数据库

目录

一、引言

二、Python连接MySQL数据库的准备工作

1.安装Python MySQL连接库

(1)mysql-connector-python

(2)PyMySQL

2.建立数据库连接

(1)导入库与配置参数

(2)创建连接对象

(3)创建游标对象

三、常见的MySQL操作

1.数据插入(INSERT)

2. 数据更新(UPDATE)

3. 数据删除(DELETE)

4. 数据查询(SELECT)

四、连接池技术

1.连接池的核心价值

2.使用DBUtils实现连接池

五、事务管理

1. 事务的ACID特性

2.事务控制命令

3.事务隔离级别详解

六、实战案例

1.转账场景的事务控制

七、总结


一、引言

在现代软件开发中,数据库是核心基础设施之一。MySQL作为最流行的开源关系型数据库管理系统(RDBMS),因其高性能、易用性和丰富的功能被广泛应用于各类场景。Python作为一门简洁高效的编程语言,通过与MySQL的结合,能够快速实现数据存储、查询和分析。本章将系统性地讲解Python操作MySQL数据库的核心技术,涵盖连接管理、SQL操作、事务控制及性能优化等内容,并结合实际案例深入剖析关键知识点。


二、Python连接MySQL数据库的准备工作

1.安装Python MySQL连接库

Pythn与MySQL的交互依赖于第三方库。以下是两种主流库的对比与安装方法:

(1)mysql-connector-python

  • 特点:MySQL官方维护的库,支持纯Python实现,兼容性高,但性能略低于其他库。
  • 安装命令:
pip install mysql-connector-python

(2)PyMySQL

  • 特点:纯Python编写的轻量级库,性能较好,社区活跃,适合快速开发。
  • 安装命令:
pip install pymysql

选择建议:若需与MySQL官方特性深度集成,优先选择mysql-connector-python;若追求轻量和灵活,推荐使用PyMySQL。


2.建立数据库连接

连接MySQL数据库的核心步骤如下:

(1)导入库与配置参数

import pymysql

db_config = {
    "host": "localhost",   # 数据库服务器地址
    "user": "root",        # 用户名
    "password": "password",# 密码
    "database": "testdb"   # 目标数据库
}

(2)创建连接对象

使用 pymysql.connect()方法建立连接:

db = pymysql.connect(**db_config)

关键参数解析:

  • host:支持IP地址或域名,远程连接时需开放数据库端口(默认3306)。
  • charset:可选参数,指定字符集(如utf8mb4),避免中文乱码。

(3)创建游标对象

游标(Cursor)是执行SQL操作的核心接口:

cursor = db.cursor()

游标的作用:

  • 执行SQL语句(execute()方法)。
  • 获取查询结果(fetchone()、fetchall())。
  • 管理事务(提交或回滚)。

三、常见的MySQL操作

1.数据插入(INSERT)

基本语法:

sql = "INSERT INTO users (name, age) VALUES (%s, %s)"
cursor.execute(sql, ("Alice", 25))
db.commit()  # 提交事务

注意事项:

  • 防SQL注入:必须使用%s占位符,避免直接拼接字符串。
  • 批量插入:使用executemany()方法提升效率:
data = [("Bob", 30), ("Charlie", 35)]
cursor.executemany(sql, data)
db.commit()

2. 数据更新(UPDATE)

语法示例:

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

关键点:

  • WHERE条件:必须明确更新范围,否则可能导致全表更新。
  • 影响行数:通过 cursor.rowcount 获取受影响的行数,用于验证操作是否成功。

3. 数据删除(DELETE)

语法示例:

sql = "DELETE FROM users WHERE name = %s"
cursor.execute(sql, ("Alice",))
db.commit()

风险控制:

  • 备份数据:删除操作不可逆,建议先备份或启用事务回滚机制。
  • 软删除:实际开发中更推荐通过标记字段(如 is_deleted)实现逻辑删除。

4. 数据查询(SELECT)

基础查询:

cursor.execute("SELECT * FROM users")
results = cursor.fetchall()
for row in results:
    print(row)

高级查询技巧:

  • 模糊查询:使用 LIKE 和%通配符:
cursor.execute("SELECT * FROM users WHERE name LIKE %s", ("%a%",))
  • 联合查询:通过 JOIN 关联多表数据:
sql = """
    SELECT users.name, orders.amount 
    FROM users 
    INNER JOIN orders ON users.id = orders.user_id
"""
cursor.execute(sql)

性能优化:

  • 限制返回行数:使用 LIMIT 子句减少数据传输量。
  • 索引优化:为高频查询字段添加索引,加速检索。

四、连接池技术

1.连接池的核心价值

  • 资源复用:避免频繁创建和销毁连接,减少TCP三次握手及MySQL认证开销。
  • 并发控制:通过限制最大连接数,防止数据库因过多连接而崩溃。

2.使用DBUtils实现连接池

安装与配置:

pip install dbutils

代码示例:

from dbutils.pooled_db import PooledDB

pool = PooledDB(
    creator=pymysql,
    maxconnections=5,   # 最大连接数
    **db_config
)

# 从池中获取连接
conn = pool.connection()
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
conn.close()  # 归还连接至池

参数详解:

  • maxcached :设置空闲连接的最大数量。
  • blocking: 当连接池满时是否阻塞等待(默认为False,直接报错)。

五、事务管理

1. 事务的ACID特性

  • 原子性(Atomicity):事务内的操作要么全部成功,要么全部失败。
  • 一致性(Consistency):事务执行前后数据库状态保持一致。
  • 隔离性(Lsolation):并发事务间互不干扰。
  • 持久性(Durability):事务提交后,数据永久保存。

2.事务控制命令

  • 开启事务:
db.autocommit = False  # 关闭自动提交
cursor.execute("START TRANSACTION")
  • 提交事务:
db.commit()
  • 回滚事务:
db.rollback()

3.事务隔离级别详解

隔离级别 脏读 不可重复读 幻读 性能影响 适用场景
DEAD UNCOMMITTED 日志分析等非关键场景
READ COMMITTED 多数OLTP系统(如Oracle)
REPEATEBLE READ 较高 MySQL默认(金融交易)
SERIALIZABLE 高一致性需求(如库存)

设置方法:

cursor.execute("SET TRANSACTION ISOLATION LEVEL READ COMMITTED")

六、实战案例

1.转账场景的事务控制

try:
    conn.autocommit = False
    cursor.execute("UPDATE accounts SET balance = balance - 100 WHERE user_id = 1")
    cursor.execute("UPDATE accounts SET balance = balance + 100 WHERE user_id = 2")
    conn.commit()
except Exception as e:
    conn.rollback()
    print(f"操作失败:{e}")

设计要点:

  • 原子性保障:通过 try-except 捕获异常并回滚。
  • 锁机制:在高并发场景下,结合 SELECT ... FOR UPDATE 锁定记录。

七、总结

Python操作MySQL数据库的核心在于灵活运用连接管理、SQL执行与事务控制。通过连接池技术可显著提升高并发下的性能,而事务隔离级别的选择需权衡一致性与效率。实际开发中,建议遵循以下原则:

  1. 代码健壮性:始终使用参数化查询防范SQL注入。
  2. 资源管理:即时关闭游标与连接,避免内存泄漏。
  3. 监控与优化:通过慢查询日志分析性能瓶颈,针对性优化索引与SQL语句。

掌握这些技能后,开发者能够构建高效、稳定的数据库应用,从容应对复杂业务场景。

你可能感兴趣的:(数据库,mysql)