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

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

工具类的核心代码解析

MySQLHandler 类简介

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

连接数据库

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

执行查询

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

数据插入

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

数据更新与删除

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

代码详解

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

python 复制代码
import pymysql

class MySQLHandler:
    def __init__(self, host, user, password, database, port=3306):
        self.host = host
        self.user = user
        self.password = password
        self.database = database
        self.port = port
        self.connection = None

    def 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}")
            raise

    def 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 result
        except Exception as e:
            print(f"查询失败: {e}")
            raise

    def execute_update(self, query, params=None):
        """执行更新语句"""
        try:
            with self.connection.cursor() as cursor:
                rows_affected = cursor.execute(query, params)
                self.connection.commit()
                return rows_affected
        except Exception as e:
            print(f"更新失败: {e}")
            self.connection.rollback()
            raise

    def 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}")
            raise

    def 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}")
            raise

    def 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 的使用示例,包含常见的数据库操作流程。

python 复制代码
from mysql_utils import MySQLHandler

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

相关推荐
千千寰宇9 分钟前
[Java/Python] Java 基于命令行调用 Python
python·java se-jdk/jvm
一只爱撸猫的程序猿34 分钟前
构建一个简单的智能文档问答系统实例
数据库·spring boot·aigc
nanzhuhe1 小时前
sql中group by使用场景
数据库·sql·数据挖掘
天天摸鱼的java工程师1 小时前
从被测试小姐姐追着怼到运维小哥点赞:我在项目管理系统的 MySQL 优化实战
java·后端·mysql
消失在人海中1 小时前
oracle sql 语句 优化方法
数据库·sql·oracle
yvestine1 小时前
自然语言处理——文本表示
人工智能·python·算法·自然语言处理·文本表示
Clang's Blog1 小时前
一键搭建 WordPress + MySQL + phpMyAdmin 环境(支持 PHP 版本选择 & 自定义配置)
数据库·mysql·php·wordpr
zzc9211 小时前
MATLAB仿真生成无线通信网络拓扑推理数据集
开发语言·网络·数据库·人工智能·python·深度学习·matlab
编程有点难1 小时前
Python训练打卡Day43
开发语言·python·深度学习
未来之窗软件服务1 小时前
JAVASCRIPT 前端数据库-V1--仙盟数据库架构-—-—仙盟创梦IDE
数据库·数据库架构·仙盟创梦ide·东方仙盟数据库