当前位置:首页>python>10分钟掌握 Python操作MySQL数据库之pymysql模块

10分钟掌握 Python操作MySQL数据库之pymysql模块

  • 2026-09-11 09:03:57
10分钟掌握 Python操作MySQL数据库之pymysql模块

概述

Python 操作 MySQL 小白?pymysql 保姆级教程,从建连接到调存储过程,全给你捋明白。

一、Python操作MySQL

一、pymysql 简介以及安装

前面基础课程介绍了使用文件来保存数据,这种方式虽然简单、易用,但只适用于保存一些格式简单、数据量不太大的数据。对于数据量巨大且具有复杂关系的数据,当然还是推荐使用数据库进行保存。

pymsyql 安装:

pip install pymysql 

-i https://pypi.tuna.tsinghua.edu.cn/simple

或者直接用 pycharm 安装,

二、pymysql 创建数据库连接

  1. pymysql 连接对象导入:从 pymysql 模块中导入 Connection 类,用于创建 MySQL 数据库连接。

  2. 基础连接参数配置:创建连接时需指定核心参数,包括主机名(host)、端口(port)、用户名(user)、密码(password)。

  3. 数据库连接创建:通过 Connection() 实例化对象,建立 Python 与 MySQL 服务器的网络连接。

  4. 连接对象属性 / 方法查看:

  5. 连接资源释放:使用 close() 方法关闭数据库连接,避免资源泄漏,是数据库操作的规范步骤。

总结

  1. pymysql 连接 MySQL 的核心是通过 Connection 类传入主机、端口、账号密码等参数创建连接。

  2. 连接创建后可通过内置方法验证连接信息,使用完毕必须调用 close() 释放连接资源。

  3. 基础连接是所有 MySQL 数据库操作的前提,参数配置错误会直接导致连接失败。

将pymysql创建数据库连接的过程进行改进。

  1. 连接异常防护:使用 try-except 语句捕获数据库连接过程中可能出现的异常(如账号错误、服务未启动等),避免程序直接崩溃。

  2. 连接对象初始化为 None:先将连接变量 con 赋值为 None,便于后续判断连接是否成功创建。

  3. finally 块保证资源释放:无论连接是否成功、是否触发异常,finally 块都会执行,确保连接资源被释放。

  4. 连接有效性判断:在关闭连接前通过 if con: 判断连接对象是否有效,避免对 None 调用 close() 引发新异常。

  5. 异常信息捕获与输出:通过 Exception as e 捕获所有类型异常,并打印异常信息,便于排查连接失败原因。

总结

  1. 改进版连接写法核心是引入异常处理机制,用 try-except 捕获连接错误,finally 确保连接必关闭。

  2. 先初始化连接变量为 None,再通过条件判断避免无效关闭操作,提升代码健壮性。

  3. 异常信息打印是排查连接问题的关键,弥补了基础写法中无错误处理的缺陷。

三、pymysql 执行 DDL 语句

  1. 连接时指定数据库:创建 Connection 连接对象时,可通过 database 参数直接指定要操作的数据库,替代手动执行 select_db() 语句。

  2. 游标对象的创建与作用:通过连接对象的 cursor() 方法创建游标对象,游标是执行 SQL 语句的核心载体。

  3. DDL 语句的执行:使用游标对象的 execute() 方法执行数据定义语言(DDL),包括创建表(CREATE TABLE)、修改表结构(ALTER TABLE)等操作。

  4. 建表语句规范:创建数据表时可指定字段类型、约束(如主键、自增、非空、默认值)、存储引擎(ENGINE=InnoDB)和字符集(CHARSET=utf8)。

  5. 表结构修改操作:通过 ALTER TABLE 语句可实现添加字段(ADD COLUMN)、修改字段属性(MODIFY)等表结构调整。

  6. DDL 执行特性:DDL 语句执行后无需手动提交(区别于 DML 语句),执行即生效。

  7. 游标资源管理:游标对象使用后可省略手动关闭,关闭数据库连接时会自动释放游标资源。

  8. 异常处理覆盖 DDL 场景:将 DDL 语句执行逻辑纳入 try-except 块,捕获表已存在、字段重复、语法错误等 DDL 执行异常。

对表中字段及表名的增删改操作

一、对表中字段的操作

  1. 向表中添加字段格式:alter table 表名 add [column] 字段名 字段类型;示例:ALTER TABLE stu ADD COLUMN age INT;

  2. 删除表中的字段格式:alter table 表名 drop [column] 字段名;示例:ALTER TABLE stu DROP age;

  3. 修改字段的名字格式:alter table 表名 change [column] 旧字段名 新字段名 字段类型;示例:ALTER TABLE stu CHANGE COLUMN sname s2name VARCHAR(20);

  4. 修改字段的类型格式:alter table 表名 modify [column] 字段名 字段类型;示例:ALTER TABLE stu MODIFY id VARCHAR(20);

二、修改表的名字

    格式:alter table 旧表名 rename to 新表名;

    示例:ALTER TABLE stu4 RENAME TO stu5;

总结

  1. pymysql 执行 DDL 需先创建游标对象,通过 execute() 执行建表、改表等语句,且 DDL 无需手动提交。

  2. 连接时指定 database 参数可直接定位操作库,简化代码;游标资源可随连接关闭自动释放。

  3. 异常处理需覆盖 DDL 执行全流程,捕获表结构操作中的语法、约束等错误。

四、pymysql 执行 DML 语句

(一)pymysql 执行 select 查询操作

  1. 查询语句执行流程:pymysql 执行 SELECT 查询需先创建游标对象,通过execute()执行查询 SQL 语句,再通过游标方法获取结果。

  2. 全量查询结果获取:使用游标对象的fetchall()方法可获取 SELECT 语句返回的所有查询结果,返回值为元组类型(内部每个元素是一行数据的元组)。

  3. 查询结果遍历:可通过 for 循环遍历fetchall()返回的结果集,逐行读取数据表中的记录。

  4. 连接参数指定数据库:创建连接时通过database参数指定目标数据库,无需额外执行use 数据库名语句。

  5. 异常处理覆盖查询场景:将查询操作纳入try-except块,捕获 SQL 语法错误、表不存在、字段错误等查询相关异常。

  6. 资源释放规范:无论查询是否成功,最终通过finally块判断并关闭数据库连接,避免资源泄漏。

  7. 游标对象的核心作用:游标不仅可执行 DDL 语句,也是执行 SELECT 查询、获取结果的核心载体。

总结

  1. pymysql 执行 SELECT 查询的核心是 “游标执行 SQL + fetchall () 获取结果”,结果集为嵌套元组,可遍历读取。

  2. 查询操作需纳入异常处理,覆盖语法、表 / 字段不存在等常见错误。

  3. 连接关闭操作放在 finally 块,确保无论是否异常都能释放数据库连接资源。

(二)pymysql 执行 insert 插入操作

pymysql 执行 INSERT 操作的核心是游标执行插入 SQL,需通过autocommit=True或手动commit()确保数据提交。

insert_id()可获取插入记录的自增主键,是插入操作后常用的关联查询手段。

插入操作需注意字段值与表结构匹配,异常处理需覆盖类型错误、主键冲突等场景。

(三)pymysql 执行 update 更新操作

(四)pymysql 执行 delete 删除操作

五、pymysql 调用存储过程

  1. 存储过程调用语法:在 pymysql 中通过游标执行 CALL 存储过程名(参数) 语句,实现对 MySQL 存储过程的调用。

  2. 会话变量的使用:利用 MySQL 会话变量(如 @s)接收存储过程的 OUT 类型参数输出值,实现存储过程与外部的数据传递。

  3. 输出结果获取方式:调用存储过程后,需执行 SELECT 语句查询会话变量,再通过游标 fetchone() 方法获取单行查询结果。

  4. 结果集解析:fetchone() 返回单行数据的元组,通过下标(如 result[0])可提取具体的输出参数值。

  5. 连接与游标基础操作:延续 pymysql 标准操作流程,创建连接、获取游标、执行 SQL,最终释放资源。

  6. 自动提交配置复用:连接时设置 autocommit=True,确保存储过程执行及会话变量赋值相关操作即时生效。

  7. 异常处理覆盖存储过程调用:捕获存储过程不存在、参数数量 / 类型不匹配、会话变量使用错误等调用相关异常。

  8. 资源释放规范:通过 finally 块判断并关闭数据库连接,避免因异常导致的资源泄漏

pymysql调用存储过程案例

结束语

1

后续我会持续输出优质、实用的内容,也欢迎大家在评论区留言,说说你们最想学习的内容、遇到的困惑,我们一起交流、一起进步。

愿每一位软件人,都能在这里收获知识、突破自我,在自己的赛道上发光发热✨

最新文章

随机文章