Python MySQL – mysql-connector 驱动(一文讲透)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观
前言
在现代软件开发中,数据库操作是连接代码与数据的核心桥梁。对于 Python 开发者而言,Python MySQL – mysql-connector 驱动是连接 MySQL 数据库的首选工具。它提供了高效、稳定的接口,帮助开发者轻松完成数据读写、事务管理等任务。无论是构建小型应用还是大型系统,掌握这一驱动的使用方法都至关重要。
本文将从零开始讲解 mysql-connector 的核心功能,通过实际案例和代码示例,帮助编程初学者和中级开发者快速上手,并深入理解其底层逻辑。
一、安装与环境配置
1.1 安装 mysql-connector
首先需要安装驱动包。在命令行中执行以下命令:
pip install mysql-connector-python
1.2 MySQL 数据库准备
确保本地或远程 MySQL 服务已启动,并创建一个测试数据库。例如,通过 MySQL 命令行运行:
CREATE DATABASE test_db;
二、基础操作:连接与查询
2.1 连接数据库
连接数据库是操作数据的第一步。可以将其想象为“打开一本笔记本”,需要提供正确的地址、密码和权限。
import mysql.connector
config = {
"host": "localhost", # 数据库地址
"user": "root", # 用户名
"password": "your_password", # 密码
"database": "test_db", # 数据库名称
"port": 3306 # 端口号(默认 3306)
}
conn = mysql.connector.connect(**config)
print("Connected to MySQL database!")
2.2 使用游标执行查询
连接成功后,需要通过**游标(Cursor)**对象执行 SQL 语句。游标的作用类似于“光标”,指向数据库中的具体位置。
cursor = conn.cursor()
cursor.execute("SELECT VERSION()") # 查询 MySQL 版本
result = cursor.fetchone()
print("MySQL version:", result[0])
cursor.close()
conn.close()
三、核心功能详解
3.1 数据表操作
3.1.1 创建表
create_table_sql = """
CREATE TABLE IF NOT EXISTS students (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
age INT,
major VARCHAR(100)
);
"""
cursor.execute(create_table_sql)
3.1.2 插入数据
insert_sql = "INSERT INTO students (name, age, major) VALUES (%s, %s, %s)"
data = ("Alice", 20, "Computer Science")
cursor.execute(insert_sql, data)
conn.commit() # 提交事务
3.1.3 查询数据
cursor.execute("SELECT * FROM students")
results = cursor.fetchall()
for row in results:
print(f"ID: {row[0]}, Name: {row[1]}, Age: {row[2]}, Major: {row[3]}")
3.1.4 更新与删除
update_sql = "UPDATE students SET age = %s WHERE name = %s"
cursor.execute(update_sql, (21, "Alice"))
conn.commit()
delete_sql = "DELETE FROM students WHERE id = %s"
cursor.execute(delete_sql, (1,))
conn.commit()
四、高级功能
4.1 事务管理
事务(Transaction)是数据库操作的“逻辑单元”,确保一组操作要么全部成功,要么全部失败。可以将其比喻为“保存点”:
try:
# 开始事务
cursor.execute("START TRANSACTION")
# 执行多个操作
cursor.execute("INSERT INTO students ...")
cursor.execute("UPDATE ...")
# 提交事务
conn.commit()
except Exception as e:
# 回滚事务
conn.rollback()
print("Transaction failed:", str(e))
4.2 预处理语句与参数化查询
通过参数化查询可以有效防止 SQL 注入攻击。例如:
query = "SELECT * FROM students WHERE age > %s AND major = %s"
params = (20, "Mathematics")
cursor.execute(query, params)
五、错误处理与优化
5.1 常见错误及处理
错误类型 | 原因及解决方法 |
---|---|
InterfaceError | 连接已关闭,需重新建立连接 |
ProgrammingError | SQL 语法错误,需检查语句 |
IntegrityError | 违反约束(如主键冲突) |
示例:
try:
# 执行危险操作
except mysql.connector.Error as err:
print("MySQL error:", err)
except Exception as e:
print("General error:", e)
5.2 性能优化技巧
- 连接池:复用连接,减少开销。
from mysql.connector import pooling pool = mysql.connector.pooling.MySQLConnectionPool( pool_name="mypool", pool_size=5, **config )
- 索引优化:为高频查询字段添加索引。
CREATE INDEX idx_name ON students(name);
六、实战案例:学生管理系统
6.1 需求分析
构建一个简单的学生管理系统,支持以下功能:
- 添加学生信息
- 查询学生列表
- 更新学生年龄
- 删除学生记录
6.2 完整代码示例
import mysql.connector
def main():
config = {
"host": "localhost",
"user": "root",
"password": "your_password",
"database": "test_db",
}
try:
conn = mysql.connector.connect(**config)
cursor = conn.cursor()
# 创建表
cursor.execute("CREATE TABLE IF NOT EXISTS students ...")
# 添加学生
def add_student(name, age, major):
sql = "INSERT INTO students (name, age, major) VALUES (%s, %s, %s)"
cursor.execute(sql, (name, age, major))
conn.commit()
# 查询所有学生
def list_students():
cursor.execute("SELECT * FROM students")
for row in cursor.fetchall():
print(f"ID: {row[0]}, Name: {row[1]}")
# 更新年龄
def update_age(student_id, new_age):
sql = "UPDATE students SET age = %s WHERE id = %s"
cursor.execute(sql, (new_age, student_id))
conn.commit()
# 删除学生
def delete_student(student_id):
sql = "DELETE FROM students WHERE id = %s"
cursor.execute(sql, (student_id,))
conn.commit()
# 示例调用
add_student("Bob", 22, "Physics")
list_students()
update_age(2, 23)
delete_student(3)
except Exception as e:
print("Error:", e)
finally:
if conn.is_connected():
cursor.close()
conn.close()
if __name__ == "__main__":
main()
结论
通过本文的学习,开发者可以掌握Python MySQL – mysql-connector 驱动的核心功能,从基础的增删改查到高级的事务管理、性能优化。无论是构建小型工具还是复杂系统,这一驱动都能提供可靠的支持。
建议读者在实际项目中结合以下原则:
- 始终使用参数化查询避免 SQL 注入;
- 对敏感操作使用事务保证数据一致性;
- 定期优化查询语句和索引。
希望本文能成为你数据库开发道路上的坚实起点!