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连接已关闭,需重新建立连接
ProgrammingErrorSQL 语法错误,需检查语句
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 需求分析

构建一个简单的学生管理系统,支持以下功能:

  1. 添加学生信息
  2. 查询学生列表
  3. 更新学生年龄
  4. 删除学生记录

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 驱动的核心功能,从基础的增删改查到高级的事务管理、性能优化。无论是构建小型工具还是复杂系统,这一驱动都能提供可靠的支持。

建议读者在实际项目中结合以下原则:

  1. 始终使用参数化查询避免 SQL 注入;
  2. 对敏感操作使用事务保证数据一致性;
  3. 定期优化查询语句和索引。

希望本文能成为你数据库开发道路上的坚实起点!

最新发布