目录
一、引言
二、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操作、事务控制及性能优化等内容,并结合实际案例深入剖析关键知识点。
Pythn与MySQL的交互依赖于第三方库。以下是两种主流库的对比与安装方法:
pip install mysql-connector-python
pip install pymysql
选择建议:若需与MySQL官方特性深度集成,优先选择mysql-connector-python;若追求轻量和灵活,推荐使用PyMySQL。
连接MySQL数据库的核心步骤如下:
import pymysql
db_config = {
"host": "localhost", # 数据库服务器地址
"user": "root", # 用户名
"password": "password",# 密码
"database": "testdb" # 目标数据库
}
使用 pymysql.connect()方法建立连接:
db = pymysql.connect(**db_config)
关键参数解析:
游标(Cursor)是执行SQL操作的核心接口:
cursor = db.cursor()
游标的作用:
基本语法:
sql = "INSERT INTO users (name, age) VALUES (%s, %s)"
cursor.execute(sql, ("Alice", 25))
db.commit() # 提交事务
注意事项:
data = [("Bob", 30), ("Charlie", 35)]
cursor.executemany(sql, data)
db.commit()
语法示例:
sql = "UPDATE users SET age = %s WHERE name = %s"
cursor.execute(sql, (26, "Alice"))
db.commit()
关键点:
语法示例:
sql = "DELETE FROM users WHERE name = %s"
cursor.execute(sql, ("Alice",))
db.commit()
风险控制:
基础查询:
cursor.execute("SELECT * FROM users")
results = cursor.fetchall()
for row in results:
print(row)
高级查询技巧:
cursor.execute("SELECT * FROM users WHERE name LIKE %s", ("%a%",))
sql = """
SELECT users.name, orders.amount
FROM users
INNER JOIN orders ON users.id = orders.user_id
"""
cursor.execute(sql)
性能优化:
安装与配置:
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() # 归还连接至池
参数详解:
db.autocommit = False # 关闭自动提交
cursor.execute("START TRANSACTION")
db.commit()
db.rollback()
隔离级别 | 脏读 | 不可重复读 | 幻读 | 性能影响 | 适用场景 |
DEAD UNCOMMITTED | 是 | 是 | 是 | 低 | 日志分析等非关键场景 |
READ COMMITTED | 否 | 是 | 是 | 中 | 多数OLTP系统(如Oracle) |
REPEATEBLE READ | 否 | 否 | 是 | 较高 | MySQL默认(金融交易) |
SERIALIZABLE | 否 | 否 | 否 | 高 | 高一致性需求(如库存) |
设置方法:
cursor.execute("SET TRANSACTION ISOLATION LEVEL READ COMMITTED")
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}")
设计要点:
Python操作MySQL数据库的核心在于灵活运用连接管理、SQL执行与事务控制。通过连接池技术可显著提升高并发下的性能,而事务隔离级别的选择需权衡一致性与效率。实际开发中,建议遵循以下原则:
掌握这些技能后,开发者能够构建高效、稳定的数据库应用,从容应对复杂业务场景。