03. 数据库工具类封装
2024年10月28日大约 2 分钟
03. 数据库工具类封装
1. 封装的目的
- 将常用的数据库操作,封装到一个方法。 后续再操作数据库时,通过调用该方法来实现。
- 提高代码的复用性!
2. 封装实现
# 类方法:get_conn()// 获取数据库连接
# 类方法:close_conn()// 关闭数据库连接
# 类方法:get_one(sql)// 查询一条数据
# 类方法:uid_db(sql)// 执行数据库增删改
# 要求:定义一个DBUtil工具类,对外提供以上方法
# 封装数据库工具类
class DBUtil(object):
@classmethod
def __get_conn(cls):
pass
@classmethod
def __close_conn(cls):
pass
# 常用方法:查询一条
@classmethod
def select_one(cls, sql):
pass
# 常用方法:增删改
@classmethod
def uid_db(cls, sql):
pass
utils.py
import pymysql
# 封装数据库工具类
class DBUtil(object):
# 添加类属性
conn = None
@classmethod
def __get_conn(cls):
# 判断 conn 是否为空,如果是,再创建
if cls.conn is None:
cls.conn = pymysql.connect(
host="localhost",
port=3306,
user="root",
password="admin",
database="py_book",
charset="utf8"
)
# 返回 非空连接
return cls.conn
@classmethod
def __close_conn(cls):
# 判断,conn 不为空,需要关闭。
if cls.conn is not None:
cls.conn.close()
cls.conn = None
# 常用方法:查询一条
@classmethod
def select_one(cls, sql):
cursor = None
res = None
try:
# 获取连接
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.__close_conn()
# 将查询sql执行的 结果,返回
return res
# 常用方法:增删改
@classmethod
def uid_db(cls, sql):
cursor = None
try:
# 获取连接
cls.conn = cls.__get_conn()
# 获取游标
cursor = cls.conn.cursor()
# 执行 uid 语句
cursor.execute(sql)
print("影响的行数:", cls.conn.affected_rows())
# 提交事务
cls.conn.commit()
except Exception as err:
# 回滚事务
cls.conn.rollback()
print("增删改 SQL 执行失败:", str(err))
finally:
# 关闭游标
cursor.close()
# 关闭连接
cls.__close_conn()
if __name__ == '__main__':
res = DBUtil.select_one("select * from bookinfo;")
print("查询结果为:", res)
DBUtil.uid_db("update bookinfo set is_delete = 1 where id = 5;")
- 使用
from utils import DBUtil
res = DBUtil.select_one("select * from bookinfo;")
print(res)
DBUtil.uid_db('delete from bookinfo where id = 1111;')