目录
七、数据库工具类封装
1、封装的目的
2、设计数据库工具类
3、实现类方法
1️⃣获取、关闭连接
2️⃣查询一条记录
3️⃣增删改数据
4️⃣完整封装代码实现
七、数据库工具类封装
1、封装的目的
将常用的数据库操作,封装到一个方法。 后续再操作数据库时,通过调用该方法来实现。
提高代码的复用性!
2、设计数据库工具类
class DBUtil(object):@classmethod # 标明该方法为类方法,这样可以不用创建实例就可以调用方法def __getconn(cls): # __把该方法私有,只有类内部可以使用pass@classmethoddef __closeconn(cls):pass# 常用方法:查询一条@classmethoddef select_one(cls,sql):pass# 常用方法:增删改@classmethoddef uid_db(cls, sql):pass
3、实现类方法
1️⃣获取、关闭连接
import pymysql# 封装数据库工具类
class DBUtil(object):# 添加类属性conn = None@classmethoddef __get_conn(cls):# 判断 conn 是否为空, 如果是,再创建if cls.conn is None:cls.conn = pymysql.connect(host="localhost", port=3306, user="root",password="123456", database="jingdong", charset="utf8")# 返回 非空连接return cls.conn@classmethoddef __close_conn(cls):# 判断,conn 不为空,需要关闭。 if cls.conn is not None:cls.conn.close()cls.conn = None # 防止:即使数据库连接已经关闭,cls.conn 依然会保持指向一个已关闭的连接对象。
2️⃣查询一条记录
# 封装数据库工具类
class DBUtil(object):# 常用方法:查询一条@classmethoddef select_one(cls, sql):cursor = Noneres = Nonetry:# 获取连接cls.conn = cls.__get_conn()# 获取游标cursor = cls.conn.cursor()# 执行查询语句cursor.execute(sql)# 提取一条结果res = cursor.fetchone()except Exception as err:print("查询sql错误:", str(err))finally:# 关闭游标cursor.close()# 关闭连接cls.__closeconn()# 将sql查询结果返回return resif __name__ == '__main__':res = DBUtil.select_one("select * from goods")print("查询一条数据的结果:",res)
3️⃣增删改数据
class DBUtil(object):# 常用方法:增删改@classmethoddef uid_db(cls, sql):cursor = Nonetry:# 获取连接和游标cls.conn = cls.__getconn()cursor = cls.conn.cursor()# 执行uid语句cursor.execute(sql)print("影响的行数:", cls.conn.affected_rows())# 提交事务cls.conn.commit()except Exception as err:# 回滚事务cls.conn.rollback()print("UID操作失败:", str(err))finally:# 关闭游标和连接cursor.close()cls.conn.close()if __name__ == '__main__':DBUtil.uid_db("insert into goods values (0,'数据库工具类封装测试英寸笔记本',1,1,'2999',default,default);")
4️⃣完整封装代码实现
py数据库工具类封装Test07.py
import pymysql
class DBUtil(object):conn =None@classmethod # 标明该方法为类方法,这样可以不用创建实例就可以调用方法def __getconn(cls): # __把该方法私有,只有类内部可以使用if cls.conn is None:cls.conn = pymysql.connect(host="localhost", port=3306, user="root",password="123456", database="jingdong", charset="utf8")return cls.conn# 常用方法:查询一条@classmethoddef __closeconn(cls):if cls.conn is not None:cls.conn.close()cls.conn = None@classmethoddef select_one(cls,sql):cursor = Noneres = Nonetry:cls.conn = cls.__getconn()cursor = cls.conn.cursor()cursor.execute(sql)res = cursor.fetchone()except Exception as err:print("查询操作失败:",str(err))finally:cursor.close()cls.__closeconn()return res@classmethoddef uid_db(cls, sql):cursor = Nonetry:cls.conn = cls.__getconn()cursor = cls.conn.cursor()cursor.execute(sql)print("影响的行数:", cls.conn.affected_rows())cls.conn.commit()except Exception as err:cls.conn.rollback()print("UID操作失败:", str(err))finally:cursor.close()cls.conn.close()if __name__ == '__main__':# res = DBUtil.select_one("select * from goods")# print("查询一条数据的结果:",res)DBUtil.uid_db("insert into goods values (0,'数据库工具类封装测试英寸笔记本',1,1,'2999',default,default);")
py使用数据库工具类.py
from py数据库工具类封装Test07 import DBUtilres = DBUtil.select_one("select * from goods")
DBUtil.uid_db("delete from goods where id=24;")
print(res)
全部内容:
PyMysql 01|(包含超详细项目实战)连接数据库、增删改查、异常捕获-CSDN博客
PyMysql 01|(包含超详细项目实战)数据库工具类封装-CSDN博客