python pymysql 小而全的Mysql数据库封装类

python pymysql 小而全的Mysql数据库封装类

python实例qingyu2023-05-30 20:01:11926A+A-

  功能说明:

  这个类是一个基于pymysql的MySQL数据库操作类,封装了常用的数据库操作方法,包括连接数据库、关闭连接、执行SQL语句、获取所有结果、获取一条结果等。

  在初始化方法中,传入了连接数据库所需的参数,包括主机名、用户名、密码、数据库名、端口号和字符集等。在连接数据库时,使用pymysql.connect()方法创建连接对象,并使用该对象创建游标对象,用于执行SQL语句。

  在执行SQL语句时,使用游标对象的execute()方法执行SQL语句,并传入参数params,用于替换SQL语句中的占位符。执行完SQL语句后,使用连接对象的commit()方法提交事务,如果出现异常,则使用rollback()方法回滚事务。

  在获取结果时,使用游标对象的fetchall()方法获取所有结果,或者使用fetchone()方法获取一条结果。获取结果后,关闭游标和连接。

  这个类的优点是封装了常用的数据库操作方法,使用起来非常方便,可以大大减少代码量。同时,使用pymysql库可以保证数据安全性和稳定性。缺点是没有考虑到连接池等高级特性,对于高并发的场景可能不够优化。

  完整代码:

import pymysql
class MySQL:
    def __init__(self, host, user, password, database, port=3306, charset='utf8'):
        self.host = host
        self.user = user
        self.password = password
        self.database = database
        self.port = port
        self.charset = charset
        self.conn = None
        self.cursor = None

    def connect(self):
        # 连接数据库
        self.conn = pymysql.connect(
            host=self.host,
            user=self.user,
            password=self.password,
            database=self.database,
            port=self.port,
            charset=self.charset
        )
        # 创建游标对象
        self.cursor = self.conn.cursor()

    def close(self):
        # 关闭游标和连接
        if self.cursor:
            self.cursor.close()
        if self.conn:
            self.conn.close()

    def execute(self, sql, params=None):
        try:
            # 连接数据库
            self.connect()
            # 执行SQL语句
            self.cursor.execute(sql, params)
            # 提交事务
            self.conn.commit()
        except Exception as e:
            # 回滚事务
            self.conn.rollback()
            raise e
        finally:
            # 关闭游标和连接
            self.close()

    def fetchall(self, sql, params=None):
        try:
            # 连接数据库
            self.connect()
            # 执行SQL语句
            self.cursor.execute(sql, params)
            # 获取所有结果
            result = self.cursor.fetchall()
            return result
        except Exception as e:
            raise e
        finally:
            # 关闭游标和连接
            self.close()

    def fetchone(self, sql, params=None):
        try:
            # 连接数据库
            self.connect()
            # 执行SQL语句
            self.cursor.execute(sql, params)
            # 获取一条结果
            result = self.cursor.fetchone()
            return result
        except Exception as e:
            raise e
        finally:
            # 关闭游标和连接
            self.close()

  使用示例:

mysql = MySQL(host='localhost', user='root', password='123456', database='test')
mysql.execute('CREATE TABLE IF NOT EXISTS user (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20), age INT)')
mysql.execute('INSERT INTO user (name, age) VALUES (%s, %s)', ('Tom', 20))
mysql.execute('INSERT INTO user (name, age) VALUES (%s, %s)', ('Jerry', 22))
result = mysql.fetchall('SELECT * FROM user')
print(result)

  输出结果:

((1, 'Tom', 20), (2, 'Jerry', 22))
点击这里复制本文地址 欢迎来到大黄鸡源码分享网
qrcode

大黄鸡源码编程网 © All Rights Reserved.  
网站备案号:闽ICP备18012015号-4
Powered by Z-BlogPHP
联系我们| 关于我们| 广告联系| 网站管理