python pymysql 小而全的Mysql数据库封装类
功能说明:
这个类是一个基于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))