使用 Python 操作 MySQL 数据库的实用工具类:MySQLHandler

操作数据库是非常常见的需求,使用 Python 和 pymysql 库封装一个通用的 MySQL 数据库操作工具类,并通过示例演示如何使用这个工具类高效地管理数据库。

工具类的核心代码解析

MySQLHandler 类简介

MySQLHandler 是一个 Python 类,用于简化对 MySQL 数据库的常见操作,如连接、查询、插入、更新和删除等。以下是该类的主要功能:

连接数据库

使用 pymysql.connect 方法建立与数据库的连接。

执行查询

提供 execute_query 方法执行 SELECT 查询,返回查询结果。

数据插入

使用 insert_data 方法将数据插入指定的表。

数据更新与删除

提供 update_data 和 delete_data 方法分别用于更新和删除数据。

代码详解

以下是 mysql_utils.py 的完整代码:

import pymysqlclass MySQLHandler:def __init__(self, host, user, password, database, port=3306):self.host = hostself.user = userself.password = passwordself.database = databaseself.port = portself.connection = Nonedef connect(self):"""建立数据库连接"""try:self.connection = pymysql.connect(host=self.host,user=self.user,password=self.password,database=self.database,port=self.port,charset='utf8mb4')except Exception as e:print(f"连接数据库失败: {e}")raisedef close(self):"""关闭数据库连接"""if self.connection:self.connection.close()def execute_query(self, query, params=None):"""执行查询语句"""try:with self.connection.cursor() as cursor:cursor.execute(query, params)result = cursor.fetchall()return resultexcept Exception as e:print(f"查询失败: {e}")raisedef execute_update(self, query, params=None):"""执行更新语句"""try:with self.connection.cursor() as cursor:rows_affected = cursor.execute(query, params)self.connection.commit()return rows_affectedexcept Exception as e:print(f"更新失败: {e}")self.connection.rollback()raisedef insert_data(self, table, data):"""插入数据"""try:keys = ', '.join(data.keys())values = ', '.join(['%s'] * len(data))query = f"INSERT INTO {table} ({keys}) VALUES ({values})"self.execute_update(query, list(data.values()))except Exception as e:print(f"插入数据失败: {e}")raisedef delete_data(self, table, condition, params):"""删除数据"""try:query = f"DELETE FROM {table} WHERE {condition}"self.execute_update(query, params)except Exception as e:print(f"删除数据失败: {e}")raisedef update_data(self, table, updates, condition, params):"""更新数据"""try:update_str = ', '.join([f"{key}=%s" for key in updates.keys()])query = f"UPDATE {table} SET {update_str} WHERE {condition}"self.execute_update(query, list(updates.values()) + params)except Exception as e:print(f"更新数据失败: {e}")raise

使用示例

main.py 文件提供了对 MySQLHandler 的使用示例,包含常见的数据库操作流程。

from mysql_utils import MySQLHandlerdef main():# 创建 MySQLHandler 实例db = MySQLHandler(host="localhost", user="root", password="root", database="testdb")try:# 连接数据库db.connect()# 执行查询示例result = db.execute_query("SELECT * FROM users")print("查询结果:", result)# 插入数据示例db.insert_data("users", {"name": "Alice", "age": 25})print("数据插入成功")# 更新数据示例db.update_data("users", {"age": 26}, "name=%s", ["Alice"])print("数据更新成功")# 删除数据示例db.delete_data("users", "name=%s", ["Alice"])print("数据删除成功")except Exception as e:print(f"发生错误: {e}")finally:# 关闭数据库连接db.close()if __name__ == "__main__":main()

MySQLHandler 提供了一个简单、灵活的方式来管理 MySQL 数据库操作。它封装了连接、查询、插入、更新和删除的逻辑,可以减少重复代码,提高开发效率。在实际使用中,还可以根据项目需求扩展该类的功能,例如增加事务管理或日志记录。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/65215.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高精度问题

目录 算法实现基础 高精度加法AB 测试链接 源代码 代码重点 高精度减法A-B 测试链接 源代码 代码重点 高精度乘法A*b和A*B 测试链接 源代码 代码重点 高精度除法A/b和A/B 测试链接 源代码 代码重点 高精度求和差积商余 算法实现基础 本算法调用STL…

基于Spring Boot的中国戏曲文化传播系统

一、系统背景与意义 中国戏曲作为中华民族的文化瑰宝,具有深厚的历史底蕴和艺术价值。然而,随着现代生活节奏的加快和娱乐方式的多样化,传统戏曲文化的传播和普及面临诸多挑战。因此,开发一个基于Spring Boot的中国戏曲文化传播系…

GitLab安装及使用

目录 一、安装 1.创建一个目录用来放rpm包 2.检查防火墙状态 3.安装下载好的rpm包 4.修改配置文件 5.重新加载配置 6.查看版本 7.查看服务器状态 8.重启服务器 9.输网址 二、GitLab的使用 1.创建空白项目 2.配置ssh 首先生成公钥: 查看公钥 把上面的…

14-zookeeper环境搭建

0、环境 java:1.8zookeeper:3.5.6 1、下载 zookeeper下载点击这里。 2、安装 下载完成后解压,放到你想放的目录里。先看一下zookeeper的目录结构,如下图: 进入conf目录,复制zoo_sample.cfg&#xff0…

springcloud依赖

springcloud 父依赖版本管理&#xff1a; 在父亲工程添加依赖管理之后&#xff0c;在子工程则不用指定版本&#xff0c;可以很好的避免版本冲突。 <properties><spring-cloud-alibaba.version>2021.0.4.0</spring-cloud-alibaba.version><spring-cloud.ve…

C++---------动态内存管理

以下是对 C 中相关概念的详细说明及代码示例&#xff1a; 一、动态分配和堆 new 操作符&#xff1a; new 操作符用于在堆上动态分配内存。它会调用对象的构造函数&#xff08;如果是类对象&#xff09;并返回指向分配内存的指针。示例&#xff1a; #include <iostream&g…

.NET Framework 逐渐过时,.NET 8和 .NET 9引领未来

随着科技的不断进步&#xff0c;软件开发的工具和技术也在不断更新换代。.NET Framework&#xff0c;曾是微软的旗舰开发平台&#xff0c;曾经在软件开发领域占据了主导地位。然而&#xff0c;随着技术的演变和开发需求的变化&#xff0c;.NET Framework逐渐显得力不从心&#…

R语言数据分析案例46-不同区域教育情况回归分析和探索

一、研究背景 教育是社会发展的基石&#xff0c;对国家和地区的经济、文化以及社会进步起着至关重要的作用。在全球一体化进程加速的今天&#xff0c;不同区域的教育发展水平呈现出多样化的态势。这种差异不仅体现在教育资源的分配上&#xff0c;还表现在教育成果、教育投入与…

单机和微服务的区别,微服务有什么问题?数据一致性问题怎么解决?幂等问题怎么解决?

单机和微服务的区别&#xff0c;微服务有什么问题&#xff1f;数据一致性问题怎么解决&#xff1f;幂等问题怎么解决&#xff1f; 单机架构和微服务架构在设计理念、部署和扩展性上有显著区别。 单机架构 vs 微服务架构 单机架构 定义&#xff1a;所有组件&#xff08;前端…

基于springboot+vue实现的卷烟营销统计分析系统 (源码+L文+ppt)4-129

摘 要 卷烟行业的快速发展使得卷烟营销统计分析系统成为了一个必不可少的工具。基于Java的卷烟营销统计分析系统旨在提供高效、准确和便捷的适用卷烟营销服务。本文讲述了基于java语言开发&#xff0c;后台数据库选择MySQL进行数据的存储。该软件的主要功能是进行卷烟营销统计…

使用Docker部署一个Node.js项目

本文档将介绍如何使用Docker来部署一个Node.js项目。Docker是一种开源平台&#xff0c;可以自动化应用程序的部署、扩展和管理。通过Docker&#xff0c;我们可以将应用程序及其依赖项打包到一个容器中&#xff0c;从而确保在不同环境中运行的一致性。接下来&#xff0c;我们将逐…

mac启ssh服务用于快速文件传输

x.1 在mac上启SSH服务 方法一&#xff1a;图形交互界面启ssh&#xff08;推荐&#xff09; 通过sharing - advanced - remote login来启动ssh&#xff1b;&#xff08;中文版mac应该是 “系统设置 → 通用 → 共享”里打开“远程登录”来启动&#xff09; 查看自己的用户名和…

青蛇人工智能学家

青蛇人工智能学家 青蛇&#xff0c;是蓝星上&#xff0c;最出名的人工智能学家。 在蓝星上&#xff0c;大家都知道&#xff0c;青蛇人工智能学家&#xff0c;最大的爱好&#xff0c;是美食。 青蛇人工智能学家&#xff0c;对自己的食物&#xff0c;非常在意&#xff0c;对自己的…

[c++进阶(三)]单例模式及特殊类的设计

1.前言 在实际场景中,总会遇见一些特殊情况,比如设计一个类,只能在堆上开辟空间, 或者是设计一个类只能实例化一个对象。那么我们应该如何编写代码呢&#xff1f;本篇将会详细的介绍 本章重点&#xff1a; 本篇文章着重讲解如何设计一些特殊 的类,包括不能被拷贝,只能在栈/堆上…

【LLM论文日更】| 训练大型语言模型在连续潜在空间中进行推理

论文&#xff1a;https://arxiv.org/pdf/2412.06769代码&#xff1a;暂未开源机构 &#xff1a;Meta领域&#xff1a;思维链发表&#xff1a;arxiv 研究背景 研究问题&#xff1a;这篇文章要解决的问题是如何在大语言模型&#xff08;LLMs&#xff09;中实现一种新的推理范式&…

opc da 服务器数据 转 opc ua项目案例

目录 1 案例说明 2 VFBOX网关工作原理 3 应用条件 4 查看OPC DA服务器的相关参数 5 配置网关采集opc da数据 6 用opc ua协议转发采集的数据 7 在服务器上运行仰科OPC DA采集软件 8 案例总结 1 案例说明 在OPC DA服务器上运行OPC DA client软件查看OPC DA服务器的相关参…

学习threejs,PerspectiveCamera透视相机和OrthographicCamera正交相机对比

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.PerspectiveCamera透…

PHP后执行php.exe -v命令报错并给出解决方案

文章目录 一、执行php.exe -v命令报错解决方案 一、执行php.exe -v命令报错 -PHP Warning: ‘C:\windows\SYSTEM32\VCRUNTIME140.dll’ 14.38 is not compatible with this PHP build linked with 14.41 in Unknown on line 0 解决方案 当使用PHP8.4.1时遇到VCRUNTIME140.dll…

分布式调度框架学习笔记

一、分布式调度框架的基本设计 二、线程池线程数量设置的基本逻辑 cpu是分时复用的方法&#xff0c;线程是cpu调度的最小单元 如果当前cpu核数是n&#xff0c;计算密集型线程数一般设为n&#xff0c;io密集型(包括磁盘io和网络io)线程数一般设置为2n. 计算密集型线程数一般设…

vue 基础学习

一、ref 和reactive 区别 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><div id"app"><h1>{{Web.title}}</h1><h1&…