数据库工具类封装
实际测试中,我们会将常用的数据库操作,封装到一个方法,通过调用该方法来实现,提高代码的复用性。
import pymysql
class UtilDb(object):
con = None
@classmethod
def __get_con(cls):
if cls.con is None:
cls.con = pymysql.connect(
host="xxx",
port=3306, user='root',
password='ss',
database='ss',
charset='utf8')
return cls.con
@classmethod
def __close_con(cls):
if cls.con is not None:
cls.con.close()
cls.con = None
@classmethod
def selcet_db_one(cls, sql):
cursor = None
res = None
try:
cls.con = cls.__get_con()
# 获取游标
cursor = cls.con.cursor()
# sql
cursor.execute(sql)
# 获取第一条结果
res = cursor.fetchone()
except Exception as err:
print('查询sql错误:', str(err))
finally:
cursor.close()
cls.__close_con()
return res
@classmethod
def fix_db(cls, sql):
cursor = None
try:
cls.con = cls.__get_con()
# 获取游标
cursor = cls.con.cursor()
# sql
cursor.execute(sql)
cls.con.commit()
except Exception as err:
cls.con.rollback()
print('增删改sql错误:', str(err))
finally:
cursor.close()
cls.__close_con()
解析
1 为了节省连接的创建,我们在创建连接的时候先进行判断。con是否为空,如果是,再创建,如果不是空的,就直接返回创建好的即可。
def __get_con(cls):
if cls.con is None:
# 判断不为空再连接,否则直接返回创建好的链接
return cls.con
2 关闭连接的时候,如果连接不为空,我们才执行关闭操作,如果是空,说明没有连接,就不需要执行关闭操作。关闭完以后,要置为空,方便其他函数中进行判断。
def __close_con(cls):
if cls.con is not None:
cls.con.close()
cls.con = None
3 函数前面加两个下划线,表示是类的私有方法
总结
1 封装是代码优化必不可少的,我们新手一开始可能会觉得不好理解,但是多多练习,就能提高自己的代码能力。
2 代码的api可以不熟悉,但是思路一定要清晰。公共部分要提取出来,每一个功能都封装成函数。
3 自己封装的工具,一定要测试一下,没有问题的才可以给其他模块去调用
4 上面的代码,获取游标的功能其实可以提取出来,创建连接的功能目前是写死的,其实可以进行参数化,更加灵活等。
代码优化是无止境的,一个阶段回过头发现可能又有优化点,这是很正常的。