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

使用 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 数据库操作。它封装了连接、查询、插入、更新和删除的逻辑,可以减少重复代码,提高开发效率。在实际使用中,还可以根据项目需求扩展该类的功能,例如增加事务管理或日志记录。

相关文章:

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

操作数据库是非常常见的需求,使用 Python 和 pymysql 库封装一个通用的 MySQL 数据库操作工具类,并通过示例演示如何使用这个工具类高效地管理数据库。 工具类的核心代码解析 MySQLHandler 类简介 MySQLHandler 是一个 Python 类,用于简化…...

DB-GPT V0.6.3 版本更新:支持 SiliconCloud 模型、新增知识处理工作流等

DB-GPT V0.6.3版本现已上线,快速预览新特性: 新特性 1. 支持 SiliconCloud 模型,让用户体验多模型的管理能力 如何使用: 修改环境变量文件.env,配置SiliconCloud模型 # 使用 SiliconCloud 的代理模型 LLM_MODELsiliconflow_p…...

亚式期权定价模型Turnbull-Wakeman进行delta对冲

Turnbull-Wakeman Model是一种用于定价和对冲亚式期权的数学模型。该模型由David Turnbull和Keith Wakeman在1990年提出,用于解决亚式期权的定价问题。 亚式期权是一种路径依赖类型的期权,其期权价格与标的资产价格某个期间内的平均值有关,假…...

Java的list中状态属性相同返回true的实现方案

文章目录 项目背景方案一、for循环实现实现思路 方案二、stream实现实现思路 项目背景 在项目中会遇到list中多个状态判断,状态值相等时,总体返回为true。 方案一、for循环实现 实现思路 遍历list,当出现不一致时,直接跳出循环…...

在 React 项目中安装和配置 Three.js

React 与 Three.js 的结合 :通过 React 管理组件化结构和应用逻辑,利用 Three.js 实现 3D 图形的渲染与交互。使用这种方法,我们可以在保持代码清晰和结构化的同时,实现令人惊叹的 3D 效果。 在本文中,我们将以一个简…...

服务器压力测试怎么做

在部署任何Web应用程序或服务之前,进行服务器压力测试(也称为负载测试)是确保系统能够处理预期用户流量的关键步骤。通过模拟大量并发请求,可以评估服务器的性能、稳定性和响应时间,识别潜在瓶颈,并优化资源…...

TCN-Transformer+LSTM多变量回归预测(Matlab)添加气泡图、散点密度图

TCN-TransformerLSTM多变量回归预测(Matlab)添加气泡图、散点密度图 目录 TCN-TransformerLSTM多变量回归预测(Matlab)添加气泡图、散点密度图预测效果基本介绍程序设计参考资料 预测效果 基本介绍 基本介绍 1.双路创新&#xff…...

Mac 查询IP配置,网络代理

常用命令 1.查询IP ifconfig | grep "inet" 2.ping查询 ping 172.18.54.19(自己IP) 3.取消代理,通过在终端执行以下命令,可以取消 Git 的代理设置 git config --global --unset http.proxy git config --global …...

Vue2五、商品分类:My-Tag表头组件,My-Table整个组件

准备: 安包 npm less less-loader。拆分:一共分成两个组件部分: 1:My-Tag 标签一个组件。2:My-Table 整体一个组件(表头不固定,内容不固定(插槽)) 一&…...

梯度下降法求六轴机械臂逆向解

梯度下降法求六轴机械臂逆向解 一、几何基础 对于上述六轴机械臂的数学建模来说,可以构建一个六轴机械臂的运动学正逆解的数学模型,在一个直角坐标系中有如下旋转矩阵: 绕x轴旋转 R x ( θ x ) [ 1 0 0 0 cos ⁡ θ x sin ⁡ θ x 0 − …...

【生成模型之九】Paint by Example: Exemplar-based Image Editing with Diffusion Models

论文:Paint by Example: Exemplar-based Image Editing with Diffusion Models 代码:https://github. com/Fantasy-Studio/Paint-by-Example 为了实现高质量的基于样本的图像编辑,我们引入了四项关键技术,即利用图像先验、强数据-mask增强、内容瓶颈CLIP class token和无…...

集成RabbitMQ+MQ常用操作

文章目录 1.环境搭建1.Docker安装RabbitMQ1.拉取镜像2.安装命令3.开启5672和15672端口4.登录控制台 2.整合Spring AMQP1.sun-common模块下创建新模块2.引入amqp依赖和fastjson 3.新建一个mq-demo的模块1.在sun-frame下创建mq-demo2.然后在mq-demo下创建生产者和消费者子模块3.查…...

PVE虚拟化平台之开启虚拟机IP显示方法

PVE虚拟化平台之开启虚拟机IP显示方法 一、PVE平台介绍1.1 PVE简介1.2 PVE特点1.3 PVE主要使用场景二、检查PVE环境2.1 环境介绍2.2 检查PVE和虚拟机状态三、虚拟机开启Qemu代理四、Linux虚拟机安装Guest-Agent4.1 进入虚拟机VNC控制台4.2 查看虚拟机IP五、Windows虚拟机安装Gu…...

子Shell及Shell嵌套模式

子Shell 概念 Shell子进程,Shell脚本是从上至下,从左至右依次执行每一行的命令及语句的,即执行完一个命令之后再执行下一个。如果在shell脚本中遇到子脚本(即脚本嵌套),就会先执行子脚本的内容,完成后再返回父脚本继…...

Onedrive精神分裂怎么办(有变更却不同步)

Onedrive有时候会分裂,你在本地删除文件,并没有同步到云端,但是本地却显示同步成功。 比如删掉了一个目录,在本地看已经删掉,onedrive显示已同步,但是别的电脑并不会同步到这个删除操作,在网页版…...

【gym】给定的强化学习环境简介(二)

文章目录 环境介绍一 box2dbipedal_walkercar_dynamicscar_racinglunar_lander 二、 classic_controlacrobotCartPolecontinuous_mountain_carmountain_carpendulum 三、toy_textblackjackcliffwalkingfrozentaxi 四、mujocoAnt:HalfCheetah:Hopper&…...

ctfhub disable_functions关卡

1.CTFHub Bypass disable_function —— LD_PRELOAD 2.CTFHub Bypass disable_function —— ShellShock 3.CTFHub Bypass disable_function —— Apache Mod CGI 4.CTFHub Bypass disable_function —— 攻击PHP-FPM 5.CTFHub Bypass disable_function —— GC UAF 6.CTFHub B…...

SpringAI人工智能开发框架006---SpringAI多模态接口_编程测试springai多模态接口支持

可以看到springai对多模态的支持. 同样去创建一个项目 也是跟之前的项目一样,修改版本1.0.0 这里 然后修改仓库地址,为springai的地址 然后开始写代码...

2025年我国网络安全发展形势展望

展望2025年,我国网络安全产业有望迎来新的快速增长阶段,零信任安全架构将在各行各业加快应用落地,数据安全技术攻关和应用进程加快,关键基础设施安全能力不断提升。同时,也应关注国家级网络对抗风险加剧、网络安全产业…...

【漏洞复现】BIG-IP Next Central Manager OData 注入漏洞(CVE-2024-21793)

🏘️个人主页: 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦 一、漏洞概述 1.1漏洞简介 漏洞名称:BIG-IP Next Central Manager OData 注入漏洞漏洞编号:CVE-2024-21793漏洞威胁等级:超危影响范围:BIG-IP Next Central Manage…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...

Redis上篇--知识点总结

Redis上篇–解析 本文大部分知识整理自网上,在正文结束后都会附上参考地址。如果想要深入或者详细学习可以通过文末链接跳转学习。 1. 基本介绍 Redis 是一个开源的、高性能的 内存键值数据库,Redis 的键值对中的 key 就是字符串对象,而 val…...

ZYNQ学习记录FPGA(二)Verilog语言

一、Verilog简介 1.1 HDL(Hardware Description language) 在解释HDL之前,先来了解一下数字系统设计的流程:逻辑设计 -> 电路实现 -> 系统验证。 逻辑设计又称前端,在这个过程中就需要用到HDL,正文…...