当前位置: 首页 > java >正文

44 Python MySQL(PyMySQL 驱动)

python里,对数据库的操作,除了上一篇介绍的mysql-connector库,MySQL也是广泛应用的开源关系型数据库。

一、安装与准备

在命令行里输入以下命令就可以完成安装:pip install PyMySQL。

二、创建数据库

以下是创建一个名为 test_db 的数据库的示例代码:

import pymysql# 建立与 MySQL 服务器的连接
try:db = pymysql.connect(host='localhost',user='leo',password='123456')cursor = db.cursor()# 创建数据库的 SQL 语句create_database_sql = "CREATE DATABASE IF NOT EXISTS test_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"try:cursor.execute(create_database_sql)print("数据库创建成功")except pymysql.Error as e:print(f"创建数据库时出错: {e}")
finally:if db:db.close()

在上述代码中,我们先建立与 MySQL 服务器的连接并获取游标,然后使用 CREATE DATABASE 语句创建数据库。IF NOT EXISTS 确保在数据库不存在时才创建,避免重复创建导致的错误。CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci 用于设置数据库的字符集和排序规则,以支持更广泛的字符存储和处理。如果创建过程中出现错误,会捕获异常并打印错误信息,最后关闭数据库连接。 

三、建立连接

数据库创建好之后,我们就可以连接到这个数据库进行后续操作了。下面是一个连接到刚才创建的 test_db 数据库的 Python 代码示例:

import pymysql# 建立数据库连接
try:db = pymysql.connect(host='localhost',user='leo',password='123456',database = "test_db")print("成功连接到 MySQL 服务器")
except pymysql.Error as e:print(f"连接 MySQL 服务器时出错: {e}")

四、数据操作:增删改查

4.1 创建数据库表

在创建好数据库后,我们可以在其中创建表来存储数据。以下是在 test_db 数据库中创建一个名为 user_info 的表的示例:

import pymysql# 建立数据库连接
db = pymysql.connect(host='localhost',user='leo',password='123456',database='test_db'
)cursor = db.cursor()# 如果表存在则删除
cursor.execute("DROP TABLE IF EXISTS user_info")# 创建表的 SQL 语句
sql = """
CREATE TABLE user_info (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255) NOT NULL,age INT
)
"""try:cursor.execute(sql)print("表创建成功")
except pymysql.Error as e:print(f"创建表时出错: {e}")
finally:db.close()

上述代码中,先获取数据库游标,然后使用 DROP TABLE IF EXISTS 语句删除可能存在的同名表,再执行 CREATE TABLE 语句创建新表。若创建成功会打印提示信息,出错则捕获异常并打印错误信息,最后关闭数据库连接。

4.2 插入数据

向表中插入数据是常见的操作。以下是插入一条员工记录的示例:

import pymysql# 建立数据库连接
db = pymysql.connect(host='localhost',user='leo',password='123456',database='test_db'
)cursor = db.cursor()# SQL 插入语句
sql = "INSERT INTO user_info (name, age) VALUES (%s, %s)"
val = ("张三", 25)try:cursor.execute(sql, val)db.commit()print(f"{cursor.rowcount} 条记录插入成功")
except pymysql.Error as e:db.rollback()print(f"插入数据时出错: {e}")
finally:db.close()

这里使用 INSERT INTO 语句插入数据,通过 execute() 方法执行 SQL 语句,使用 commit() 提交事务。如果插入过程中出现错误,会回滚事务并打印错误信息。

4.3 查询数据

从表中查询数据是获取信息的重要手段。以下是查询所有员工记录的示例: 

import pymysql# 建立数据库连接
db = pymysql.connect(host='localhost',user='leo',password='123456',database='test_db'
)cursor = db.cursor()# SQL 查询语句
sql = "SELECT * FROM user_info WHERE age > %s"
val = (20,)try:cursor.execute(sql, val)results = cursor.fetchall()for row in results:id = row[0]name = row[1]age = row[2]print(f"ID: {id}, 姓名: {name}, 年龄: {age}")
except pymysql.Error as e:print(f"查询数据时出错: {e}")
finally:db.close()

此代码通过 SELECT 语句查询满足条件的数据,使用 fetchall() 方法获取所有查询结果并遍历打印。若查询出错,捕获异常并打印错误信息。

4.4 更新数据

当数据发生变化时,需要对表中的数据进行更新。以下是将员工 “张三” 的年龄更新为 26 的示例:

import pymysql# 建立数据库连接
db = pymysql.connect(host='localhost',user='leo',password='123456',database='test_db'
)cursor = db.cursor()# SQL 更新语句
sql = "UPDATE user_info SET age = %s WHERE name = %s"
val = (26, "张三")try:cursor.execute(sql, val)db.commit()print(f"{cursor.rowcount} 条记录更新成功")
except pymysql.Error as e:db.rollback()print(f"更新数据时出错: {e}")
finally:db.close()

这里使用 UPDATE 语句更新数据,同样通过 execute() 执行语句,commit() 提交事务。若更新出错则回滚事务并打印错误。 

4.5 删除数据

如果某些数据不再需要,可以将其从表中删除。以下是删除名为 “张三” 的员工记录的示例:

import pymysql# 建立数据库连接
db = pymysql.connect(host='localhost',user='leo',password='123456',database='test_db'
)cursor = db.cursor()# SQL删除语句
sql = "DELETE FROM user_info WHERE name = %s"
val = ("张三",)try:cursor.execute(sql, val)db.commit()print(f"{cursor.rowcount} 条记录删除成功")
except pymysql.Error as e:db.rollback()print(f"删除数据时出错: {e}")
finally:db.close()

 这段代码使用 DELETE FROM 语句删除满足条件的数据,执行语句和提交事务的操作与前面类似,出错时回滚并打印错误。

五、事务处理:保障数据一致性

事务具有原子性、一致性、隔离性和持久性(ACID)四个特性,它能确保数据库操作的可靠性。在 PyMySQL 中,事务提供了 commit 和 rollback 方法。

import pymysql# 建立数据库连接
db = pymysql.connect(host='localhost',user='leo',password='123456',database='test_db'
)cursor = db.cursor()# 多条 SQL 语句组成一个事务
sql1 = "INSERT INTO user_info (name, age) VALUES (%s, %s)"
val1 = ("李四", 28)
sql2 = "UPDATE user_info SET age = age + 1 WHERE name = %s"
val2 = ("李四",)try:cursor.execute(sql1, val1)cursor.execute(sql2, val2)db.commit()print("事务执行成功")
except pymysql.Error as e:db.rollback()print(f"事务执行出错,已回滚: {e}")
finally:db.close()

在这个示例中,包含插入和更新两条 SQL 语句,它们组成一个事务。如果所有语句都执行成功,就提交事务;若其中有错误,会回滚整个事务,保证数据的一致性。

六、错误处理:应对异常情况

在使用 PyMySQL 进行数据库操作时,可能会遇到各种错误。PyMySQL 定义了一系列异常类来处理这些情况,比如 Warning 表示严重警告,Error 是所有其他错误的基类,还有 InterfaceError(数据库接口模块错误)、DatabaseError(数据库相关错误)等。 

import pymysqltry:db = pymysql.connect(host='localhost',user='leo',password='123456',database='test_db')cursor = db.cursor()sql = "SELECT * FROM non_existent_table"cursor.execute(sql)
except pymysql.ProgrammingError as e:print(f"编程错误: {e},可能是表不存在或 SQL 语法错误")
except pymysql.Error as e:print(f"数据库操作出错: {e}")
finally:if db:db.close()

七、删除数据库

import pymysql# 建立与 MySQL 服务器的连接
try:connection = pymysql.connect(host="localhost",user="leo",password="123456")cursor = connection.cursor()# 要删除的数据库名称database_name = "test_db"# 删除数据库的 SQL 语句delete_database_query = f"DROP DATABASE IF EXISTS {database_name}"# 执行 SQL 语句cursor.execute(delete_database_query)print(f"数据库 {database_name} 已成功删除。")except pymysql.Error as err:print(f"操作过程中出现错误: {err}")
finally:if connection:cursor.close()connection.close()print("数据库连接已关闭。")

八、总结

  1. 掌握 PyMySQL 的安装方法,根据系统情况选择合适的安装方式。
  2. 学会使用 pymysql.connect() 方法连接 MySQL 服务器和数据库,连接时确保各项参数正确。
  3. 熟练运用 CREATE DATABASECREATE TABLEINSERT INTOSELECTUPDATEDELETE 等 SQL 语句进行数据库和数据表的创建,以及数据的增删改查操作。
  4. 理解事务的概念,使用 commit 和 rollback 方法保证数据一致性。
  5. 学会捕获和处理 PyMySQL 中不同类型的异常,提高程序的稳定性和健壮性。
http://www.xdnf.cn/news/4793.html

相关文章:

  • Java的对象头:原理与源码详解
  • python实现的音乐播放器
  • 企业生产安全管理平台的功能架构
  • Java后端程序员学习前端之JavaScript
  • PHP反序列化漏洞
  • CBO和HBO区别及介绍
  • 【包含例题P1955、P1892、P2024、P1196】并查集、扩展域并查集、带权并查集
  • arcmap栅格数据地理坐标转换,从WGS84坐标到2000
  • 深入理解Bitmap及Roaring Map:原理与应用详解
  • PPIO × GPT4All:构建本地知识库,让AI更懂你
  • 从单智到多智:深度拆解基于MetaGPT的智能体辩论
  • AI原生手机:三大技术阵营的终极对决与未来展望
  • 使用Maple Flow创建电路最坏情况分析WCCA工作表
  • 【前端】每日一道面试题2:解释CSS盒模型的box-sizing属性,以及它在响应式布局中的作用。
  • 字符串哈希(算法题)
  • VR 南锣鼓巷:古老街区的数字化绘卷与沉浸式遨游​
  • 高处安装、维护拆除作业考试重点知识
  • PlatformIO
  • 遗传算法求解异构车队VRPTW问题
  • 基于Credit的流量控制
  • SQL知识点总结
  • 【Yolo精读+实践+魔改系列】Yolov3论文超详细精讲(翻译+笔记)
  • 第一次被AI指点出文章的问题
  • 【AXI总线专题】-AXI-LITE总线解读
  • 307.重新格式化电话号码
  • MySQL中MVCC的实现原理
  • WarpDemuX
  • AI开发跃迁指南(第三章:第四维度1——Milvus、weaviate、redis等向量数据库介绍及对比选型)
  • docker镜像误删恢复
  • 网络字节序 - 大端