關於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'])