python连接数据库是实际开发中必要的过程,但其中的有些数据库的操作过程往往重复,结果造成代码冗余,可读性差。这就要求我们封装一个连接和使用数据库的方法,可以反复调用,提升开发效率
1 import pymysql 2 3 class Model(object): 4 def __init__(self, username='root', password='123456', database='demo', 5 port=3306, host='localhost'): 6 # 创建连接 7 self.connection = pymysql.connect(user=username, password=password, database=database, 8 port=port, host=host, cursorclass=pymysql.cursors.DictCursor) 9 # 创建游标10 self.cursor = self.connection.cursor()11 12 # 查询所有数据13 def fetchall(self, sql):14 try:15 self.__execute(sql)16 return self.cursor.fetchall()17 except Exception as error:18 print(error)19 20 # 查询多条数据21 def fetchmany(self, sql, size=1):22 try:23 self.__execute(sql)24 return self.cursor.fetchmany(size)25 except Exception as error:26 print(error)27 28 # 查询一条数据29 def fetchone(self, sql):30 try:31 self.__execute(sql)32 return self.cursor.fetchone()33 except Exception as error:34 print(error)35 36 # 增删改的方法37 def change(self, sql):38 try:39 self.__execute(sql)40 self.connection.commit()41 except Exception as error:42 print(error)43 44 # 执行的私有方法45 def __execute(self, sql):46 self.cursor.execute(sql)47 48 # 关闭连接和游标49 def __del__(self):50 self.connection.close()51 self.cursor.close()
1 from data_connect import model 2 3 # 实例化Model类 4 employee = model.Model() 5 res = employee.fetchall('select nickname from employee where job="头领"')[0] 6 res1 = employee.fetchmany('select nickname from employee where job="头领"', 2) 7 res2 = employee.fetchone('select nickname from employee where name = "宋江"') 8 # print(res2) 9 10 # 插入一条语句11 employee.change('insert into employee (name)values ("关羽")')12 # 删除一条语句13 employee.change('delete from employee where name="关羽"')14 # 更新一条语句15 # obj.change('update employee set name="张飞"where id=8004')