Python3实现的Mysql数据库操作封装类

yizhihongxing

Python3实现的Mysql数据库操作封装类

本文主要介绍了如何使用Python3实现Mysql数据库的基本操作,封装一个操作Mysql数据库的类。该类可以完成数据库的增、删、改、查等操作,使用方法简单方便。

环境准备

在使用本封装类之前,需要先安装好Mysql数据库,以及相应的Python Mysql库。可以通过下面的命令进行安装:

pip install pymysql

操作封装类的实现

操作封装类的核心是将Mysql数据库操作的基本方法,封装到一个类里面。本文使用了Python的面向对象编程技术,定义了一个Mysql类,提供了数据库的增、删、改、查等操作方法。以下是封装类的核心代码:

import pymysql

class Mysql(object):
    def __init__(self, host=None, port=None, user=None, password=None, db=None, charset=None):
        '''
        初始化方法
        '''
        self.host = host or 'localhost'
        self.port = port or 3306
        self.user = user or 'root'
        self.password = password or 'password'
        self.db = db or 'test'
        self.charset = charset or 'utf8mb4'

        self.conn = None
        self.cursor = None

    def __enter__(self):
        '''
        实现with语句需要的方法
        '''
        return self.connect()

    def __exit__(self, exc_type, exc_val, exc_tb):
        '''
        实现with语句需要的方法
        '''
        self.close()

    def connect(self):
        '''
        连接数据库方法
        '''
        self.conn = pymysql.connect(
            host=self.host,
            port=self.port,
            user=self.user,
            password=self.password,
            db=self.db,
            charset=self.charset,
            cursorclass=pymysql.cursors.DictCursor
        )

        self.cursor = self.conn.cursor()

        return self

    def close(self):
        '''
        关闭数据库连接方法
        '''
        if self.cursor:
            self.cursor.close()

        if self.conn:
            self.conn.close()

        return self

    def commit(self):
        '''
        提交事务方法
        '''
        self.conn.commit()

        return self

    def rollback(self):
        '''
        回滚事务方法
        '''
        self.conn.rollback()

        return self

    # select查询语句
    def select(self, table_name, where=None, fields=None, limit=None, order_by=None):
        fields = fields or '*'

        sql = 'SELECT %s FROM `%s`' % (fields, table_name)

        if where:
            sql += ' WHERE %s' % where

        if order_by:
            sql += ' ORDER BY %s' % order_by

        if limit:
            sql += ' LIMIT %s' % limit

        self.cursor.execute(sql)

        return self.cursor.fetchall()

    # insert插入语句
    def insert(self, table_name, data):
        fields = ','.join(data.keys())
        values = ','.join(['"%s"' % v for v in data.values()])

        sql = 'INSERT INTO `%s` (%s) VALUES (%s)' % (table_name, fields, values)

        try:
            self.cursor.execute(sql)
            self.commit()
            return self.cursor.lastrowid
        except:
            self.rollback()

    # update更新语句
    def update(self, table_name, data, where=None):
        values = ','.join(['%s="%s"' % (k, v) for k, v in data.items()])

        sql = 'UPDATE `%s` SET %s' % (table_name, values)

        if where:
            sql += ' WHERE %s' % where

        try:
            self.cursor.execute(sql)
            self.commit()
            return self.cursor.rowcount
        except:
            self.rollback()

    # delete删除语句
    def delete(self, table_name, where=None):
        sql = 'DELETE FROM `%s`' % table_name

        if where:
            sql += ' WHERE %s' % where

        try:
            self.cursor.execute(sql)
            self.commit()
            return self.cursor.rowcount
        except:
            self.rollback()

代码说明:

  • 初始化方法:设置了数据库的连接参数,创建连接和游标对象。
  • enter()和__exit__()方法:用于实现上下文管理器,可以使用with语句连接和关闭数据库。
  • connect()和close()方法:连接和关闭数据库。
  • commit()和rollback()方法:提交和回滚事务。
  • select()方法:查询操作。
  • insert()方法:插入操作。
  • update()方法:更新操作。
  • delete()方法:删除操作。

示例用法

下面来看2个使用该封装类的简单示例。

示例1:查询数据

from mysql import Mysql

if __name__ == '__main__':
    with Mysql(db='test') as mysql:
        result = mysql.select('user', where='status=1', limit=10)
        for row in result:
            print(row)

执行以上代码可以查询user表的前10条记录。

示例2:插入数据

from mysql import Mysql

if __name__ == '__main__':
    data = {
        'name': '张三',
        'age': 18,
        'status': 1
    }

    with Mysql(db='test') as mysql:
        mysql.insert('user', data)

执行以上代码可以插入一条新记录到user表中。

总结

本文介绍了如何使用Python3封装Mysql数据库的基本操作,提供了一个操作Mysql的封装类,可以实现数据库增、删、改、查等通用操作。示例代码也展示了如何使用该封装类进行数据库操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python3实现的Mysql数据库操作封装类 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • python实现PCA降维的示例详解

    Python实现PCA降维的示例详解 什么是PCA? PCA(Principal Component Analysis,主成分分析)是一种常用的数据降维方法,它可以将高维度数据映射到一个低维度空间中。在数据处理和数据挖掘领域中,PCA已被广泛应用于数据的预处理,可视化和分类等方面。 PCA通过线性变换将高维度数据映射到低维度空间中,并保留尽量多的数据方差。因…

    python 2023年6月6日
    00
  • python将三维数组展开成二维数组的实现

    要将一个三维数组展开成二维数组,我们需要把每个二维数组在第一个维度上拼接成一个大二维数组。可以使用NumPy库来实现这个功能。 下面是Python将三维数组展开成二维数组的步骤: 1. 导入NumPy库 要使用NumPy将三维数组展开成二维数组,需要先导入NumPy库。可以使用以下代码导入: import numpy as np 2. 定义三维数组 在使用N…

    python 2023年6月5日
    00
  • Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法

    请参考以下攻略: Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法 步骤一:安装依赖包 pip install mysql-connector-python pandas mysql-connector-python:用于连接MySQL数据库 pandas:用于处理数据和生成csv文件 步骤二:连接MySQL数据库 import my…

    python 2023年5月20日
    00
  • python3实现随机数

    下面我来详细讲解“Python3实现随机数”的完整攻略。 1. random库 Python中内置的random库可以生成伪随机数(Pseudorandom Numbers),它可以用来进行随机数的生成。 1.1 生成随机数(整数) random库中生成随机数的函数有多种,下面介绍其中两个: randint(a, b):生成一个[a, b]之间的整数。例如:…

    python 2023年6月3日
    00
  • Python BeautifulSoup [解决方法] TypeError: list indices must be integers or slices, not str

    PythonBeautifulSoup[解决方法]TypeError:list indices must be integers or slices, not str 在使用Python的BeautifulSoup库进行网页解析时,有时会遇到TypeError:list indices must be integers or slices, not的错误。本…

    python 2023年5月13日
    00
  • Python实现一个简单的MySQL类

    下面是Python实现一个简单的MySQL类的详细攻略: 主要步骤 安装MySQLdb模块 在Python中操作MySQL需要使用MySQL官方提供的MySQLdb模块,因此首先需要安装MySQLdb模块。可使用以下命令进行安装: pip install MySQLdb 编写MySQL类 MySQL类是本次实现的重点,在该类中需要完成与MySQL数据库的连接…

    python 2023年5月19日
    00
  • Python实现自定义异常堆栈信息的示例代码

    以下是关于Python实现自定义异常堆栈信息的示例代码的完整攻略: 问题描述 在Python中,异常堆栈信息可以帮助我们更好地理程序运行时错误。有时候,我们需要自定义异常堆栈信息,以便更好地调试程序。 解决方法 可以以下步骤在Python中实现自定义异常堆栈信息: 创建自定义异常类。 在Python中,可以创建自定义异常类。自定义异常可以继承Exceptio…

    python 2023年5月13日
    00
  • 运算符重载如何在 Python 中返回第三个类?

    【问题标题】:How operator overloading can return a third class in Python?运算符重载如何在 Python 中返回第三个类? 【发布时间】:2023-04-07 04:21:02 【问题描述】: 我在不同的文件中有以下类 class Fruit(): def __init__(self, value=…

    Python开发 2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部