對PyMySql簡單的二次封裝
阿新 • • 發佈:2018-11-21
本人新手,剛開始上手類,程式碼不規範的地方,大家可以直接評論在下面 。
本次是基於PyMySql的的二次封裝, 所以執行此程式碼之前 首先安裝PyMySQL
在cmd中執行“pip install PyMySql” 安裝即可,先來一個實際執行截圖
好了獻上原始碼一份
# author: xiejiangpeng # time:2018/10/28/11:03 # version:python3.6 # message:對mysql進行簡單的二次封裝,主要有,建表,插入語句登 import pymysql """ 說明: 1.maketable() 格式 : tablename(表名),**field(key='欄位名',value='欄位說明') 預設的欄位型別為varchar(255) 2.insertsqlone() 格式 : tablename,**field(key='欄位名',value='欄位值') **field長度不限 3.querysql() 格式 : querysql(查詢sql) 4.update() 格式 : updatesql(更新sql) 5.deleteone() 格式 : tablename,**field(查詢條件 比如 id=1) """ class DiyMysql(object): def __init__(self, host, port, user, passwd, db, charset): self.host = host self.port = port self.user = user self.passwd = passwd self.db = db self.charset = charset try: self.condb = pymysql.connect(host=self.host, port=self.port, user=self.user, passwd=self.passwd, db=self.db, charset=self.charset) except Exception as abnormal: print("資料庫連線錯誤,錯誤內容%s " % abnormal) # 建立一個遊標物件 self.cursor = self.condb.cursor() def maketable(self, tablename, **field): basesql = "" # 定義basesql # 判斷表名為tablename表名是否存在,如果是 直接刪除 self.cursor.execute("DROP TABLE IF EXISTS %s" % tablename) # 將field,拼接basesql for key in field: basesql = basesql + "%s varchar(255) DEFAULT NULL COMMENT '%s'," % (key, field.get(key)) makesql = """ CREATE TABLE %s ( id int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID', %s PRIMARY KEY (`id`) ) """ % (tablename, basesql) # 執行建表SQL self.cursor.execute(makesql) print("表:'%s' 建立成功" % tablename) def insertsqlone(self, tablename, **field): i = 0 liststr = "" # 欄位的集合 listvalues = [] # values欄位對應值的集合 for key in field: liststr = liststr + "%s," % key listvalues.append(field[key]) i = i + 1 listfield = "(" + liststr[0:len(liststr) - 1] + ")" # 最終的欄位集合 values = tuple(listvalues) # 最終的欄位值集合 # sql語句 insertsql = "INSERT INTO %s%s VALUES %s" % (tablename, listfield, values) try: self.cursor.execute(insertsql) # 執行SQL self.condb.commit() # 提交到資料庫執行 except Exception as abnormal: self.condb.rollback() # 發生錯誤的時候 回滾 print("執行失敗 insert語句:'%s',失敗資訊為 %s" % (insertsql, abnormal)) # 判斷是否執行成功 if self.cursor.rowcount == 1: print("執行成功 insert語句:'%s'" % insertsql) def querysql(self, sqlquery): try: self.cursor.execute(sqlquery) # 影響的行數 except Exception as abnormal: print("SQL有誤,錯誤內容 %s" % abnormal) if self.cursor.rowcount == 0: # 0 則代表沒有查詢結果 return "沒有查詢的結果.." elif self.cursor.rowcount == 1: # 影響行數 為1 fetchone return list(self.cursor.fetchone()) else: # 多行情況下 使用fetchall return list(self.cursor.fetchall()) def update(self, updatesql): try: self.cursor.execute(updatesql) self.condb.commit() except Exception as abnormal: self.condb.rollback() print("執行失敗!update語句:'%s', 失敗內容為 %s" % (updatesql, abnormal)) exit() # 判斷是否更新成功 if self.cursor.rowcount == 1: print("執行成功!update語句:'%s'" % updatesql) else: print("執行成功!update語句:'%s',warning:更新後的值與跟新之前的值相等,或者查詢不到對應的結果" % updatesql) def deleteone(self, deletesql): try: self.cursor.execute(deletesql) self.condb.commit() except Exception as abnormal: self.condb.rollback() print("執行失敗!delete語句:'%s', 失敗內容為 %s" % (deletesql, abnormal)) exit() # 判斷是否更新成功 if self.cursor.rowcount == 1: print("執行成功!delete語句:'%s'" % deletesql) # 解構函式 def __del__(self): self.cursor.close() self.condb.close() if __name__ == '__main__': # 例項化 diycon = DiyMysql(host="127.0.0.1", port=3306, user="root", passwd="xxx", db="dbname", charset="utf8") # 1.新建一個名稱為的表,欄位為name,age,address,其中的value為欄位說明 diycon.maketable(tablename="tb_xiejiangpeng", name="姓名", age="年齡", address="家庭住址") # 2.在tb_xiejiangpeng表中 插入一條資料 diycon.insertsqlone(tablename="tb_xiejiangpeng", name="謝江鵬", age="22", address="湖南長沙") # 3.根據name=謝江鵬 查詢剛才插入的資料 queryresult = diycon.querysql("select * from tb_xiejiangpeng where name='謝江鵬'") print("查詢到的結果為:", queryresult) # 4.將id=1的那條資料 名稱修改成"彭敏" diycon.update("update tb_xiejiangpeng set name='彭敏' where id ='1'") # 5.刪除name='彭敏'的那條資料 diycon.deleteone("delete from tb_xiejiangpeng where name='彭敏'")