https://www.cnblogs.com/BlueSkyyj/p/10039972.html
关于pymysql 的增删改查,简单做个封装,方便后面使用直接拿来调用即可。
其中 增删改 的处理其实是一致的,本可以使用统一的方法,但是为了明显区分,这里分开来写了。
直接看代码就即可,如下:
# FileName : DBHandle.py # Author : Adil # DateTime : 2018/11/29 2:03 PM # SoftWare : PyCharm import pymysql # username : adil # password : helloyyj class DataBaseHandle(object): ''' 定义一个 MySQL 操作类''' def __init__(self,host,username,password,database,port): '''初始化数据库信息并创建数据库连接''' # 下面的赋值其实可以省略,connect 时 直接使用形参即可 self.host = host self.username = username self.password = password self.database = database self.port = port self.db = pymysql.connect(self.host,self.username,self.password,self.database,self.port,charset='utf8') # 这里 注释连接的方法,是为了 实例化对象时,就创建连接。不许要单独处理连接了。 # # def connDataBase(self): # ''' 数据库连接 ''' # # self.db = pymysql.connect(self.host,self.username,self.password,self.port,self.database) # # # self.cursor = self.db.cursor() # # return self.db def insertDB(self,sql): ''' 插入数据库操作 ''' self.cursor = self.db.cursor() try: # 执行sql self.cursor.execute(sql) # tt = self.cursor.execute(sql) # 返回 插入数据 条数 可以根据 返回值 判定处理结果 # print(tt) self.db.commit() except: # 发生错误时回滚 self.db.rollback() finally: self.cursor.close() def deleteDB(self,sql): ''' 操作数据库数据删除 ''' self.cursor = self.db.cursor() try: # 执行sql self.cursor.execute(sql) # tt = self.cursor.execute(sql) # 返回 删除数据 条数 可以根据 返回值 判定处理结果 # print(tt) self.db.commit() except: # 发生错误时回滚 self.db.rollback() finally: self.cursor.close() def updateDb(self,sql): ''' 更新数据库操作 ''' self.cursor = self.db.cursor() try: # 执行sql self.cursor.execute(sql) # tt = self.cursor.execute(sql) # 返回 更新数据 条数 可以根据 返回值 判定处理结果 # print(tt) self.db.commit() except: # 发生错误时回滚 self.db.rollback() finally: self.cursor.close() def selectDb(self,sql): ''' 数据库查询 ''' self.cursor = self.db.cursor() try: self.cursor.execute(sql) # 返回 查询数据 条数 可以根据 返回值 判定处理结果 data = self.cursor.fetchall() # 返回所有记录列表 print(data) # 结果遍历 for row in data: sid = row[0] name = row[1] # 遍历打印结果 print('sid = %s, name = %s'%(sid,name)) except: print('Error: unable to fecth data') finally: self.cursor.close() def closeDb(self): ''' 数据库连接关闭 ''' self.db.close() if __name__ == '__main__': DbHandle = DataBaseHandle('127.0.0.1','adil','helloyyj','AdilTest',3306) DbHandle.insertDB('insert into test(name) values ("%s")'%('FuHongXue')) DbHandle.insertDB('insert into test(name) values ("%s")'%('FuHongXue')) DbHandle.selectDb('select * from test') DbHandle.updateDb('update test set name = "%s" where sid = "%d"' %('YeKai',22)) DbHandle.selectDb('select * from test') DbHandle.insertDB('insert into test(name) values ("%s")'%('LiXunHuan')) DbHandle.deleteDB('delete from test where sid > "%d"' %(25)) DbHandle.selectDb('select * from test') DbHandle.closeDb()
# 此处执行 数据库插入,将 图片名称、url 插入到数据库 注意 这里的 values('占位符 一定要用 引号引起来,要不然执行不成功,血的教训') sql = "insert into JdwSpider(image_name,image_url) values ('%s','%s')" % (file_name,image_url) DbHandle.insertDB(sql)
查看执行结果
((22, 'YeKai'), (23, 'FuHongXue'), (24, 'LiXunHuan'), (25, 'FuHongXue'), (49, 'FuHongXue'), (50, 'FuHongXue')) sid = 22, name = YeKai sid = 23, name = FuHongXue sid = 24, name = LiXunHuan sid = 25, name = FuHongXue sid = 49, name = FuHongXue sid = 50, name = FuHongXue ((22, 'YeKai'), (23, 'FuHongXue'), (24, 'LiXunHuan'), (25, 'FuHongXue'), (49, 'FuHongXue'), (50, 'FuHongXue')) sid = 22, name = YeKai sid = 23, name = FuHongXue sid = 24, name = LiXunHuan sid = 25, name = FuHongXue sid = 49, name = FuHongXue sid = 50, name = FuHongXue ((22, 'YeKai'), (23, 'FuHongXue'), (24, 'LiXunHuan'), (25, 'FuHongXue')) sid = 22, name = YeKai sid = 23, name = FuHongXue sid = 24, name = LiXunHuan sid = 25, name = FuHongXue
以上只是简单的样例,具体使用 还需要根据自己的实际情况就行 修改,比如 sql,这里写的简单,还有查询结果,结果的处理分析,自己根据需要自行解析。
关于数据库 的连接 ,端口号 和字符类型,可写可不写,如果默认端口 不是 3306 就必须写了,且注意 写的位置。
self.db = pymysql.connect(self.host,self.username,self.password,self.database[,self.port,charset='utf8'])