- 封装目的
将 常用的数据库操作,封装到 一个方法。 后续再操作数据库时,通过调用该方法来实现。
提高代码的 复用性!
# 封装数据库工具类
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
if __name__ == '__main__':
# 定义为类方法,就不用创建类实例,可以直接使用类名.方法名()调用
DBUtil.select_one("select * from ")
DBUtil.uid_db("update/insert/delete ")
实现类方法
- 获取、关闭连接
# 封装数据库工具类
import pymysql
class DBUtil(object):
# 添加类属性
conn = None
@classmethod
def __get_conn(cls): # 私有方法
"""
判断 conn 是否为空,
如果是,再创建连接;
如果不为空(之前已经建立过连接),就不需要再次建立连接类
:return: 返回conn ,给别人使用
"""
if cls.conn is None:
cls.conn = pymysql.connect(host="211.103.136.244", port=7061, user="student",
password="iHRM_student_2021", database="test_db",charset="utf8")
# 返回非 空连接
return cls.conn
@classmethod
def __close_conn(cls): # 私有方法,定义成私有方法后,用户调用方法时看不到了,类名.关联的方法列表看不到私有方法
"""
判断 连接不为空,则关闭连接,并且把连接置为 None
:return:
"""
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("查询语句错误:", 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()
# 执行 增删改 语句
cursor.execute(sql)
print("影响的行数:", cls.conn.affected_rows())
# 提交事务
cls.conn.commit()
except Exception as err:
print("增删改执行失败", str(err))
# 回滚事务
cls.conn.rollback()
finally:
# 关闭游标
cursor.close()
# 关闭连接
cls.__close_conn()
- 完整封装代码实现
# 封装数据库工具类
import pymysql
class DBUtil(object):
# 添加类属性
conn = None
@classmethod
def __get_conn(cls): # 私有方法
"""
判断 conn 是否为空,
如果是,再创建连接;
如果不为空(之前已经建立过连接),就不需要再次建立连接类
:return: 返回conn ,给别人使用
"""
if cls.conn is None:
cls.conn = pymysql.connect(host="211.103.136.244", port=7061, user="student",
password="iHRM_student_2021", database="test_db",charset="utf8")
# 返回非 空连接
return cls.conn
@classmethod
def __close_conn(cls): # 私有方法,定义成私有方法后,用户调用方法时看不到了,类名.关联的方法列表看不到私有方法
"""
判断 连接不为空,则关闭连接,并且把连接置为 None
:return:
"""
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("查询语句错误:", 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()
# 执行 增删改 语句
cursor.execute(sql)
print("影响的行数:", cls.conn.affected_rows())
# 提交事务
cls.conn.commit()
except Exception as err:
print("增删改执行失败", str(err))
# 回滚事务
cls.conn.rollback()
finally:
# 关闭游标
cursor.close()
# 关闭连接
cls.__close_conn()
if __name__ == '__main__':
# 定义为类方法,就不用创建类实例,可以直接使用类名.方法名()调用
# DBUtil.select_one("select * from ")
# DBUtil.uid_db("update/insert/delete ")
res = DBUtil.select_one("select * from t_book;")
print("查询结果为:", res)
DBUtil.uid_db("update t_book set is_delete = 1 where id = 1111;")